【问题标题】:What are the reasons for adding angular postinstall "ngcc..." script in the project?在项目中添加 angular postinstall "ngcc ..." 脚本的原因是什么?
【发布时间】:2020-10-19 13:04:50
【问题描述】:

如果下面的问题对你来说很幼稚,请原谅:

我经历了由 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 版本的包。

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

提前致谢!

【问题讨论】:

  • 一个与我非常相似的问题。我正在查看来自9-10 的升级指南,它谈到了postinstall。我不知道我是否需要它。我使用 Angular CLI,所以我不确定这是否相关。我想知道您问题中的所有这些标志都在做什么,因为我可能也必须处理这个问题......

标签: javascript angular


【解决方案1】:

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

关于这个问题,ngcc's source 有每个问题的文档:

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

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

【讨论】:

    猜你喜欢
    • 2017-05-29
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多