Angular小博客

分享让你更聪明

[译2021]Angular 库分发即将改进

浏览:2次 日期:2024年10月20日 20:14:06 作者:admin

太长了;在 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 的一部分发布了预览实现。

远离 View Engine

目前,开发人员可以将 Ivy 或 View Engine 用于他们的应用程序和库。要将整个生态系统迁移到 Ivy,我们需要为库和应用程序开发人员提供平滑的更新路径。

查看遥测中--enableIvy标志的使用情况,我们发现绝大多数应用程序当前都在使用 Ivy,这使我们能够删除--enableIvy标志并弃用 View Engine。得益于我们的兼容性编译器,ivy 应用程序可以依赖 View Engine 库。

选择退出 Ivy 的应用程序

同时,目前所有库都是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