Angular 9 - NGCC在处理时出现未处理的异常

90

将依赖项升级到Angular 9并进行必要的代码更改后构建应用程序会导致错误:

编译@angular/animations:es2015作为esm2015编译 @angular/animations:es2015作为esm2015编译 @angular/core:es2015作为esm2015编译 @angular/core:es2015作为esm2015编译 @angular/core:es2015作为esm2015编译 错误:Worker#5上的错误:TypeError:无法读取null的'fileName'属性

然后它继续抛出以下错误:

编译@angular/core:es2015作为esm2015编译 @angular/compiler/testing:es2015作为esm2015编译 @angular/core:es2015作为esm2015编译 错误:尝试使用ngcc备份文件将node_modules/@angular/core/core.d.ts.__ivy_ngcc_bak写入,但已经存在,因此不会写入或备份node_modules/@angular/core/core.d.ts。

这个错误可能是因为两个或多个入口点重叠,ngcc被要求处理某些文件多次。您应该检查此包中的其他入口点,并设置一个配置以忽略您未使用的任何条目点。

编译@angular/core:es2015作为esm2015编译 发生未处理的异常:NGCC失败。

29个回答

0

当我运行ionic build时,我遇到了这个问题,而我的同事的项目构建得很顺利。所以我们运行ng -v来比较我们的软件包版本。结果发现我安装了较高版本的@angular-devkit/build-angular@angular-devkit/build-optimizer@angular-devkit/build-webpack。它们的版本号都是0.1001.2,而我们的项目运行的是0.901.8版本。

因此,我运行npm uninstall @angular-devkit/build-angular 0.1001.2卸载掉它,并运行npm install @angular-devkit/build-angular 0.901.8进行降级。再次运行ng -v,另外两个软件包也降级了。

最后,ionic build成功了!从那以后,我们过上了幸福的生活,直到遇到其他问题为止。我们项目的可用软件包


0

对于那些使用 Visual Studio Code 1.62 或更高版本的人来说,这些答案都没有帮助到我。

昨天(2021年10月11日)我更新了 Visual Studio Code,但不知何故我的 Angular 9 项目开始显示“NGCC 失败”。我将 Visual Studio Code 降级到 1.61.2 版本后,一切恢复正常。


0
在我的情况下,问题是我的服务器没有足够的内存(1 GB),这似乎不足以处理构建。将其增加到2 GB后,问题得到解决。

0

"prettier": "2.2.1"。删除它,因为它会干扰语义。


1
这有点简略。你能详细解释一下吗?例如,删除什么?您所说的“干扰语义”是什么意思?请通过[编辑(更改)您的答案](https://stackoverflow.com/posts/67328394/edit)来回复,而不是在评论区回复(请勿使用“Edit:”,“Update:”或类似的字眼 - 答案应该看起来像今天写的)。 - Peter Mortensen

0

我通常建议人们在每次成功部署(本地)后手动备份项目,因为当你遇到这种问题(与NGCC错误有关的所有内容)时,你可以直接硬删除node_modules文件夹并从你的最后备份中恢复它。然后再次构建。

有时候,当你无法承担更新Node.js到最新版本时,这个解决方案会非常完美。


0

我曾经遇到过类似的问题。

在我的情况下,将 Node.js 更新到新版本有所帮助。


0
在我的情况下,我从npm安装了angular-font-awesome包,然后Bootstrap。它可能会发生冲突,但我只是删除了先前安装的angular-font-awesome,然后执行了ng build

-2

这只对我有效 删除 node_modules npm install enableIvy:false 不支持使用 Angular v12 或更高版本的人


-6

请用以下 JSON 内容替换文件 tsconfig.json

{
  "compileOnSave": false,

  "compilerOptions": {
     "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "esnext",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "target": "es2015",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  },
  "angularCompilerOptions": {
    "fullTemplateTypeCheck": true,
    "strictInjectionParameters": true
  }
}

3
能否解释一下? - Captain Kenpachi
当然,“target”:“es2015”可以启用正确的编译。 - Deunz
2
你好!这个回答被你的同行们踩是因为它并不够有帮助。哪些部分可以帮助解决OP所问的未处理异常问题?解释你回答的原因是给出一个好答案的关键部分。 - Andrew Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接