在项目中添加angular postinstall“ngcc...”脚本的原因是什么?

Nee*_*mar 13 javascript angular

如果以下问题对您来说很幼稚,请原谅:

我经历了由 angular 9 开发的多个项目,其中大多数在 package.json 中都有以下一行作为 posinstall 脚本。

"postinstall": "ngcc --properties es2015 es5 browser module main --first-only --create-ivy-entry-points"

我阅读了 angular 文档,并根据我的理解添加了“ngcc”来验证安装的软件包是否与 Ivy 兼容。

同样根据他们的建议,我们不应该使用“--create-ivy-entry-points”标志,因为这会导致 Node 无法正确解析包的 Ivy 版本。

问题:有人可以解释在安装后脚本中的 ngcc 之后添加其他标志和属性的原因,例如:“--properties es2015 es5 浏览器模块 main --first-only --create-ivy-entry-points”。

提前致谢!

小智 10

实际上,ngcc 的工作不是包验证。它采用非 Ivy 库并生成 Ivy 理解的文件。我相信 ngtsc 生成的 Ivy 指令(除了不向后兼容 ngc 生成的代码之外)还不稳定,所以现在的规则是继续使用 View Engine - ngc 作为库。这就是 ngcc 如何融入图片,使用 View Engine 代码处理库。

关于这个问题,ngcc 的来源有每个人的文档:

  • 如果没有properties给出标志,ngcc 将处理所有包格式(fesm2015、fesm5、es2015、esm2015、esm5、main、module),这可能不是我们想要的。
  • 该标志first-only告诉 ngcc 处理它在 package.json 中找到的第一个属性,否则它将处理上面列出的所有条目。
  • create-ivy-entry-points会告诉NGCC为常春藤产生的进入创造,而不是覆盖以前的一个新的属性。

我认为有些人使用 postinstall 进行流程优化。我实际上是将它添加到我工作的 Angular 应用程序中,以便在我们的 CI 管道中缓存 Ivy-ready node_modules。