太长了;在 v12 中,我们将弃用称为 View Engine 的旧版编译和渲染管道。此更改不需要开发人员采取任何操作。依赖于 View Engine 的库将通过我们的兼容性编译器ngcc
继续按预期工作。如果您是库作者或有兴趣了解技术细节,请继续阅读以下部分。
Angular 的新渲染和编译管道 Ivy 是开发人员过去一年的默认体验。为了确保与旧管道的互操作性,我们维护对开发体验有影响的兼容性层。在这篇文章中,您将了解我们从旧版编译器转向更快编译和简单性的计划。
Ivy 多年来一直致力于让 Angular 变得更简单、更快、更容易维护。我们一直在微调静态检查和动态构造之间的平衡,以确保 Angular 继续提供类型检查、高效的构建时优化和快速更改检测。
从版本 9 开始,我们为全新的 Angular 应用程序启用了 Ivy,并提供了平滑、自动的更新路径。为了确保应用程序与使用以前的渲染和编译管道(View Engine)的库的向后兼容性,我们开发了一个名为ngcc
的兼容性编译器。您可能已经注意到ngcc
在创建新项目或安装依赖项后运行。
ngcc
是我们编译 View Engine 库的方法,以便 Ivy 应用程序可以使用它们。
我们花了很多时间来确保ngcc
速度很快,并且我们仅在必要时调用它,但这是安装依赖项和运行项目之间的额外步骤。此外,拥有依赖于 View Engine 的库意味着我们无法删除这个遗留实现,它有自己的维护成本,并且会减慢我们 Angular 的发展速度。
为了从 View Engine 过渡,我们制定了Ivy 库分发计划,并将其作为 RFC 与社区共享。我们收集了很多精彩的反馈,并作为 Angular v11.2 的一部分发布了预览实现。
目前,开发人员可以将 Ivy 或 View Engine 用于他们的应用程序和库。要将整个生态系统迁移到 Ivy,我们需要为库和应用程序开发人员提供平滑的更新路径。
查看遥测中--enableIvy
标志的使用情况,我们发现绝大多数应用程序当前都在使用 Ivy,这使我们能够删除--enableIvy
标志并弃用 View Engine。得益于我们的兼容性编译器,ivy 应用程序可以依赖 View Engine 库。
同时,目前所有库都是View Engine格式。得益于兼容性编译器,开发人员可以在 Ivy 应用程序和库中使用所有这些库,但反之则不然 — View Engine 库不能依赖于 Ivy。
经过与库作者和应用程序开发人员的多次对话,在 v12 中,我们将启动一项计划,完全迁移到 Ivy 并解锁 View Engine 的删除:
为了确保依赖于 Angular 框架和组件的库的顺利过渡,我们将继续以 View Engine 格式分发它们。在 v13 中,当大多数第三方库已经在使用 Ivy 时,我们也计划过渡 Angular 和组件。
这些更改仅适用于新的应用程序和库。通常不需要对现有项目采取任何操作。
如果您是应用程序开发人员,这不会对您的日常开发过程产生任何影响。如果您当前依赖 View Engine,请确保将您的应用程序移至Ivy 。
如果您正在构建库并且所有用户都在 Ivy 上,则此更改不需要您执行任何操作,除非您想尝试新的 Ivy 库分发格式。如果 View Engine 应用程序或库依赖于您的库,我们建议继续以 View Engine 格式分发它。在 v12 中,请确保在所有依赖库和应用程序都迁移到 Ivy 之前,不要选择加入 Ivy 库发行版。
随着新的 Ivy 库发行版的推出,库和应用程序开发人员将开始看到更少的ngcc
编译,因此拥有更好的开发体验。
如果您是库开发人员并且尚未准备好迁移到 Ivy,请在 v12 中将tsconfig.lib.prod.json
更新为:
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"declarationMap": false
},
"angularCompilerOptions": {
"enableIvy": false
}
}
如果您是库开发人员,您可以测试新的库分发机制并向我们提供反馈!您可以使用此配置为现有的 View Engine 库启用 Ivy 库分发。将tsconfig.lib.prod.json
更新为:
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"declarationMap": false
},
"angularCompilerOptions": {
"enableIvy": true,
"compilationMode": "partial"
}
}
如果您遇到任何问题,请在 GitHub 上报告。
如果存在依赖 View Engine 的依赖库或应用程序,请确保您与它们的作者合作将它们迁移到 Ivy,然后再为您的软件包启用 Ivy 库分发。
原文链接:https://blog.angular.dev/upcoming-improvements-to-angular-library-distribution-76c02f782aa4