Angular10启用Ivy编译器报NG6003错误,是否需先升级PrimeNG到10?
结论
Angular 10搭配PrimeNG 9完全可以正常使用Ivy,无需强制升级PrimeNG到10版本。你遇到的报错与开源PrimeNG本身无关,是内部二次封装的@maestro-ng/primeng库未适配Ivy导致。
报错NG6003已明确说明,
@maestro-ng/primeng库未被ngcc正确处理,不兼容Ivy编译模式。这个库是你们公司内部基于PrimeNG封装的私有组件库,当前1.10.0版本的打包产物为View Engine格式,且不符合ngcc自动转换的规则,因此即使配置了postinstall执行ngcc也无法正常转换。
可行解决方案
- 方案1(优先推荐):联系内部
@maestro-ng/primeng组件库的维护团队,获取适配Angular 10 Ivy的版本,替换package.json中当前的1.10.0版本即可解决问题。 - 方案2(临时兼容):若暂时无法获取适配版本,可修改配置强制ngcc处理该库:
- 根目录
tsconfig.json新增配置:
{ "angularCompilerOptions": { "enableIvy": true, "allowEmptyCodegenFiles": true } }- 修改package.json中的postinstall脚本为:
"postinstall": "ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points" - 删除node_modules文件夹和package-lock.json文件,重新执行
npm install后再执行构建测试。
- 根目录
- 方案3(过渡方案):若上述方案都无法生效,可临时关闭Ivy编译,等后续全链路依赖适配完成后再开启。在
tsconfig.json的angularCompilerOptions中设置"enableIvy": false即可,Angular 10默认使用View Engine模式,关闭Ivy不会影响PrimeNG 9的正常功能。
后续升级建议
如果后续要升级到最新版Angular,建议按顺序操作:
- 先将PrimeNG升级到和当前Angular大版本匹配的对应版本
- 确认所有内部私有组件库都适配了对应版本的Ivy
- 再执行Angular框架的大版本升级
内容的提问来源于stack exchange,提问作者Rômulo Sorato
相关产品推荐
相关产品推荐

