gpt4 book ai didi

angular - Ivy ngcc 无法读取属性 'id' 的未定义原因 __ivy_ngcc__ 已删除

转载 作者:行者123 更新时间:2023-12-04 09:42:05 28 4
gpt4 key购买 nike

我们目前正在尝试使用 Ivy 在 Angular 9 上构建我们的下一个库。我们有两个项目:一个对应于我们的组件库,第二个对应于一个“演示”,用于记录/测试它们。 Demo 通过 node_modules 调用库,其中库通过符号链接(symbolic link)链接。

当我们安装完demo的依赖后,我们需要执行:“ngcc && ngcc -s node_modules/ourLibrary --create-ivy-entry-points”来创建每个 ivy_ngcc dir 并使我们的应用程序正常工作。

我们现在可以 npm 开始我们的演示并实时重新加载更改。当我们对库进行更改并构建时,它不会自动触发更改。如果我们切断 npm start 并重新启动它,应用程序会在终端中正常启动,但在浏览器控制台中我们有:Cannot read property 'id' of undefined。如果我们运行 ngcc -s node_modules/ourLibrary --create-ivy-entry-points,一切都会再次运行

发生什么了?当我们再次构建我们的库时,没有任何变化,因为 Angular 可能会注意 ivy_ngcc 更改:生成的生成删除 ivy_ngcc 并且在文档没有成功找到它之后:“无法读取未定义的属性'id'”。这就是为什么当我们重新运行 ngcc 命令时,它会重新创建目录。但是每个过程都非常耗时。

我的问题是:有没有办法保存 ivy_ngcc 在图书馆 build 期间?唯一的解决方案是禁用可能不符合我们需求的 Ivy 吗?

有关信息,在项目中使用库进行实时重新加载在 Angular 7 上运行良好

-- 编辑 1 --

我们可以在库的 ng build 中使用 --delete-output-path 来尝试保留 ivy_ngcc 文件夹,但该选项似乎不再可用?

-- 编辑 2 --

--delete-output-path 不适用于库:

https://github.com/angular/angular-cli/issues/13274

我们可能可以制作自己的构建命令,而不是使用 ng build,但是由于 ivy 的一些好处,它变得很复杂。

最佳答案

Angular 不建议在库项目中使用 Ivy,它的效果不是很好。您至少必须禁用 Ivy 才能进行生产构建。您可以在 tsconfig.lib.prod.json 文件中提及这一点(或类似的文件,您的文件名可能会有所不同)。

{
"extends": "./tsconfig.lib.json",
"angularCompilerOptions": {
"enableIvy": false
}
}

I have observed that symlink doesn't always behave consistently, I have always encountered errors. So I prefer to create the zip file locally and then do npm install from the zip file. It's my personal opinion and you don't need to buy that.



请点击此链接:

https://angular.io/guide/creating-libraries#publishing-your-library

更多详情,您可以关注以下文章:

https://indepth.dev/the-angular-ivy-guide-for-library-authors/

关于angular - Ivy ngcc 无法读取属性 'id' 的未定义原因 __ivy_ngcc__ 已删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62280664/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com