Tại sao Angular 9 phải tự biên dịch mã?


8

Tôi vừa nâng cấp dự án của mình lên Angular 9 và điều đầu tiên tôi nhận thấy là thời gian xây dựng tăng đáng kể trong CI của tôi (Từ 2 phút lên 4 phút).

Phân tích các bản ghi, mỗi khi các bài kiểm tra hoặc bản dựng được thực hiện, CLI thực hiện việc biên dịch trước. Điều này là do kiến trúc Ivy mới , nhưng từ sự hiểu biết của tôi, việc biên dịch này chỉ xảy ra với mã không tương thích với Ivy.

Vậy tại sao tôi thấy rất nhiều Compiling @angular/common : es2015 as esm2015(Chủ yếu là từ các gói @angular) trong bản dựng của tôi? Mã Angular có nên tương thích với Ivy không?

Lưu ý: Điều này cũng xảy ra với một dự án mới (Chỉ với một vài thư viện).

Cập nhật Điều này xảy ra với tất cả các lệnh yêu cầu xây dựng. Ví dụ:

  • ng test --code-coverage=true --watch=false --browsers=ChromeHeadle
  • ng b -c=staging --aot

Cập nhật 2

Tôi đang thêm các bản dựng của mình để so sánh: trước 9 góc và sau khi di chuyển 9 góc (Bản dựng vẫn không thành công, nhưng chúng ta có thể sử dụng thử nghiệm đơn vị làm tham chiếu, từ ~ 2 phút đến ~ 4 phút trong tổng số thực hiện)


Bạn đang sử dụng lệnh / args nào để chạy / xây dựng dự án của bạn?
Kyler Johnson

@KylerJohnson Tôi đã cập nhật câu hỏi của mình
André Roggeri Campos

Angular được biên dịch là es2015. Vì bản dựng của bạn đang sử dụng esm2015 nên nó phải biên dịch lại.
Roddy of the Frozen Peas

1
@RoddyoftheF FrozenPeas nhưng ngay cả một dự án mới được khởi tạo với CLI cũng sẽ có hành vi này. Có thể thay đổi mục tiêu xây dựng để tránh việc biên dịch lại này không?
André Roggeri Campos

Ý tôi là, tôi cho rằng bạn đang sử dụng esm2015 vì một lý do, nhưng nếu bạn đổi sang sử dụng es2015 trong dự án của mình thì nên sử dụng các nhị phân được biên dịch trước.
Roddy of the Frozen Peas

Câu trả lời:


7

Bài viết này giải thích một cách hữu ích tại sao Angular 9 biên dịch các phụ thuộc với ngcc và bản đồ đường biên dịch Ivy.

Nói tóm lại, vì tập lệnh của Ivy sẽ chỉ được ổn định trong Angular 10, nhóm Angular khuyên bạn chưa xuất bản các gói được biên dịch cho Angular 9 Ivy. Sau Angular 10, các nhà bảo trì gói sẽ được khuyến khích xuất bản các gói Ivy; Các gói View Engine vẫn sẽ được hỗ trợ, nhưng không được khuyến khích.

Từ điều này, tôi kết luận một thời gian sau khi phát hành Angular 10, chúng ta sẽ thấy quá trình biên dịch ngcc ít hơn đáng kể đang diễn ra, trong một số trường hợp không, tùy thuộc vào các gói được sử dụng bởi dự án cụ thể. Trong Angular 9, bước biên dịch ngcc là một sự thỏa hiệp cần thiết mà bạn sẽ khó thoát khỏi.

Đối với tốc độ CI, các tài liệu chính thức đề nghị ngcc có thể được thực thi rõ ràng. Tôi nghĩ rằng có thể lưu trữ bước này trong CI, nhưng không biết về thiết lập cụ thể của bạn, tôi không thể đề xuất bất cứ điều gì ngoài hướng nghiên cứu.

Cập nhật: Angular 9.1 hứa hẹn cải thiện tốc độ xây dựng ngcc.


1
Tôi hiểu rồi, vậy Angular chỉ đang làm theo khuyến nghị của chính mình về việc không cung cấp các gói được biên dịch Ivy phải không?
André Roggeri Campos

@ AndréRoggeriCampos đó là những gì tôi tin nó làm, dựa trên các tài nguyên tôi đã tham chiếu.
Klaster_1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.