StackBlitz ngcc 在启用 Ivy 的情况下无法在我的 npm 库上运行

Posted

技术标签:

【中文标题】StackBlitz ngcc 在启用 Ivy 的情况下无法在我的 npm 库上运行【英文标题】:StackBlitz ngcc failed to run on my npm library with Ivy enabled 【发布时间】:2020-12-02 19:40:21 【问题描述】:

我已经向 npm 发布了一个 Angular 10 库,它在启用了 Ivy 的本地 Angular 10 项目中运行良好,但如果我尝试在 StackBlitz 上使用它,我必须禁用 Ivy。

https://stackblitz.com/edit/angular-ivy-tapxx5?file=tsconfig.json

但使用常春藤禁用

https://stackblitz.com/edit/angular-ivy-vbpzem?file=tsconfig.json

不知道为什么我必须为 StackBlitz 关闭 Ivy,但我可以在本地 CLI Ivy 项目中正常使用它。

【问题讨论】:

面临与我们所说的相同的问题。给你一个线索:我的库(lib1)依赖于我的另一个库(lib2),它依赖于 lodash。 StackBlitz 对于 lib1 和 lib2 都失败了。我删除了对 lodash 的依赖并创建了自己的简化函数。现在 lib2 可以工作,但 StackBlitz 仍然抱怨 lib1。请在此处发布更新。 ?????? 【参考方案1】:

这显然是最近反复出现的问题,filed on their GitHub repo。 类似的案例正在增加,在 Ivy 的情况下工作。

我认为可以安全地假设问题出在他们的一方,只要包在常规环境中运行良好。

https://github.com/stackblitz/core/issues/1364

编辑:Ahmed pointed out,由 StackBlitz 团队在 Twitter 上确认

【讨论】:

这是来自他们的this tweet,他们在这里承认了这一点,实际上建议了您关闭 Ivy 的解决方案 @AhmedMohamedeen 问题表明它可以在常春藤关闭的情况下使用。但是,如果导入它会使 StackBlitz 崩溃,它会使我的库看起来很糟糕。 @AdrianBrand 我认为西蒙已经回答了你原来的问题。请考虑验证它【参考方案2】:

我可以通过转到左侧面板上的设置并禁用 Enable Ivy 然后在浏览器上进行硬刷新来实现此功能。

【讨论】:

但这对于想要在 StackBlitz 中使用我的库的人来说是没有帮助的,我觉得当它不能与 Ivy 一起使用时,它会让库看起来很糟糕。 是的,但 StackBlitz 不是用来构建应用程序的,它是用来快速测试和共享代码的。然后,您很可能会将该代码放入一个真实的存储库中,然后从那里构建并将其发送到您的真实环境。在这些构建过程中,可以打开 Evy。

以上是关于StackBlitz ngcc 在启用 Ivy 的情况下无法在我的 npm 库上运行的主要内容,如果未能解决你的问题,请参考以下文章

构建启用了Ivy的monorepo Angular9库是个坏主意

`ngcc --properties es2015 浏览器模块主 --first-only --create-ivy-entry-points 上的角度错误

为啥我不应该发布用 Ivy 编译的库?

如何自动刷新Angular组件

Angular Ivy 兼容性问题

在 Angular 10 中启用 Ivy 的问题