首页 > 解决方案 > 在 Angular 10 错误 NG6003 上激活 Ivy 编译器时出错 - 无法解析为 NgModule

问题描述

我们最近将我们的应用程序迁移到 Angular 10 和 PrimeNG 9,现在我们正准备将这些框架迁移到最新版本。

我们试图准备我们的应用程序进行迁移,并希望按照 Angular 的建议使用 Ivy 编译器。

但是当激活 Ivy 编译器并将 aot 设置为 true 时,它​​会在构建时显示以下错误:

node_modules/@maestro-ng/primeng/maestro-primeng.module.d.ts:1:22 中的错误 - 错误 NG6003:出现在 AppSharedModule 的 NgModule.exports 中,但无法解析为 NgModule、组件、指令、或管道类。

这可能意味着声明 MaestroPrimengModule 的库 (@maestro-ng/primeng) 没有被 ngcc 正确处理,或者与 Angular Ivy 不兼容。检查是否有更新版本的库可用,如果有则更新。还可以考虑与图书馆的作者核实,看看图书馆是否应该与 Ivy 兼容。

这是完整的 package.json:

{
  "name": "codex-frontend",
  "version": "1.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "dev": "ng serve -c dev --watch=false",
    "postinstall": "ngcc",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^10.2.5",
    "@angular/cdk": "^10.2.7",
    "@angular/common": "^10.2.5",
    "@angular/compiler": "^10.2.5",
    "@angular/core": "^10.2.5",
    "@angular/forms": "^10.2.5",
    "@angular/platform-browser": "^10.2.5",
    "@angular/platform-browser-dynamic": "^10.2.5",
    "@angular/router": "^10.2.5",
    "@fortawesome/fontawesome-free": "5.15.4",
    "@fullcalendar/core": "5.9.0",
    "@maestro-ng/core": "https://nexus.myorg.com.br/repository/npm-all/@maestro-ng/core/-/core-1.10.0.tgz",
    "@maestro-ng/primeng": "https://nexus.myorg.com.br/repository/npm-all/@maestro-ng/primeng/-/primeng-1.10.0.tgz",
    "@types/pdfjs-dist": "2.7.5",
    "bootstrap": "5.1.1",
    "chart.js": "3.5.1",
    "core-js": "3.18.0",
    "g": "2.0.1",
    "jquery": "3.6.0",
    "js-base64": "3.7.2",
    "moment": "2.29.1",
    "ng2-currency-mask": "9.0.2",
    "ng2-pdfjs-viewer": "6.0.2",
    "ngx-moment": "5.0.0",
    "pdfjs-dist": "2.9.359",
    "@popperjs/core": "2.10.1",
    "primeflex": "2.0.0",
    "primeicons": "4.0.0",
    "primeng": "9.1.3",
    "quill": "1.3.7",
    "rxjs": "6.6.2",
    "simple-pdf-viewer": "2.0.3",
    "tslib": "2.3.1",
    "zone.js": "^0.10.3"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^0.1000.8",
    "@angular/cli": "^10.2.3",
    "@angular/compiler-cli": "10.2.5",
    "@angular/language-service": "10.2.5",
    "@fortawesome/fontawesome-free": "5.8.2",
    "@types/jasmine": "3.9.1",
    "@types/jasminewd2": "2.0.10",
    "@types/node": "16.9.6",
    "codelyzer": "6.0.2",
    "jasmine-core": "3.9.0",
    "jasmine-spec-reporter": "7.0.0",
    "karma": "6.3.4",
    "karma-chrome-launcher": "3.1.0",
    "karma-cli": "2.0.0",
    "karma-coverage-istanbul-reporter": "3.0.3",
    "karma-jasmine": "4.0.1",
    "karma-jasmine-html-reporter": "1.7.0",
    "protractor": "7.0.0",
    "ts-node": "10.2.1",
    "tslint": "^5.20.1",
    "tslint-eslint-rules": "^5.4.0",
    "typescript": "3.9.7"
  }
}

即使使用 `"postinstall": "ngcc" 它也不起作用。

是否可以将 Ivy 与 Angular 10 和 PrimeNG 9 一起使用,我们需要首先将 PrimeNG 迁移到 10?

在此处输入图像描述

标签: ivyangular10

解决方案


PrimeNG 确实符合 Angular 主要版本。

PrimeNG 10 依赖于 Angular 10,PrimeNG 11 依赖于 Angular 11。

PrimeNG官方发布说明截图

您可以在此处找到信息的官方来源


推荐阅读