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个回答

3
  • 我从文件package.json中删除了tslib.js
  • 删除了文件package-lock.json
  • 删除了node_modules文件夹
  • npm i
  • ng serve

对我来说起作用了。


谢谢@abhi。对我有用,但又创建了package-lock.json文件。 - Anant Dhas
这就是当你运行npm i时会发生的事情。 - Ben Taliadoros
@Ben Taliadoros:重点是什么? - Peter Mortensen
当您运行该命令时,将创建package-lock.json文件,并且这是有意的。Anant似乎并没有预料到这一点。 - Ben Taliadoros

3

我遇到的情况是,我试图用较新版本的Node.js来运行一个旧版本的Angular项目。我这样做了:

删除所有已存在的节点模块。

rm -rf node_modules

将Node.js更新到最新版本:

npm update
npm install

将Angular项目版本更新到最新版

ng update @angular/core

已将项目cli升级至最新版本

ng update @angular/cli

现在开始项目

ng-serve

我非常不建议删除 node_modules,至少将其重命名为 bkup 直到你确定已经解决了所有问题。可以使用 mv node_modules ~/node_modules.bkup 进行重命名。 - A Kareem

2

尝试移除 angular-font-awesome 并重新运行安装:

npm uninstall angular-font-awesome
ng add @fortawesome/angular-fontawesome@0.6.0

在我删除了fontawesome之后,问题得到了解决,现在Material Icons是我的图标选择。
但是我还是要感谢Font Awesome多年来提供免费的超棒图标 :)

1

没有禁用Ivy的情况是最佳解决方案。

对于Windows用户:

npm i rimraf -g
rimraf node_modules
npm i

1
我遇到了这个和其他错误,因为我尝试更新 Angular 9 应用程序的一些边缘库。随后在编译期间出现的错误是无意义的,因为它们没有帮助纠正错误。
删除 "node_modules" 和 "npm i" 的解决方案不起作用,因为即使我有原始的 package.json 文件,"npm i" 仍会安装不同版本的库,而不是原始版本。不知道 node_modules 文件夹中最初的库是什么。
唯一有效的解决方案是从备份中恢复 node_modules 文件夹。
否则,如果您需要更新应用程序中的库,请 休假并准备一些抗抑郁药物,但在升级库后几天内解决无意义的错误可能仍然无法提供帮助。

1
对于较旧的Angular版本,我通过Visual Studio扩展程序成功修复了此问题。
Angular CLI: 6.1.5 Node: 8.11.4 Visual Studio, Angular extension Angular view engine "Extensions" → "Angular Language Service(v12.0.2)" → "Extension Settings"
在“工作区”下,勾选“使用旧版视图引擎语言服务”。

关于“Visual Studio”:你是不是指的是“Visual Studio Code”?它们是两个不同的东西。 - Peter Mortensen

1

我遇到了这个问题,但以上的答案都没有帮助到我。

我的解决方案:

  • 导航到根 ng 项目文件夹
  • 运行 cmd 命令:./node_modules/.bin/ngc tsconfig.json
  • 这会暴露一个真正的错误:其中一个组件 *.spec.ts 文件(测试文件)有一个错误(我之前删除了一个依赖项)。在构建或尝试 VS Code 调试时,默认情况下不会显示此错误。
  • 修复错误后,VS Code 调试器和 ./node_modules/.bin/ngc tsconfig.json 命令都成功了

1
在这种情况下版本不匹配.. 首先检查node JS和angular JS的版本
然后写: npm install => ng serve 如果有端口问题: ng server --port 4201

0

很遗憾,之前的答案都没有起作用。

typescript(在我的情况下从4.8降级到4.6)解决了这个问题。


你是如何降级的?请通过编辑您的回答进行回复(不要包含“编辑:”,“更新:”或类似内容 - 回答应该看起来像今天编写的)。 - Peter Mortensen

0

对我来说,事实证明我们已经使用了 package-lock.json 中指定的软件包版本一段时间,当我尝试删除它并重新创建它以解决合并冲突时,出现了错误。当回到旧的 package-lock.json 时,问题消失了。所以我开始搜索:

  • 比较两者之间的更改
  • 检查问题是否也出现在生产中 - 那么它几乎不可能是开发依赖项
  • 筛选出不太可能和可能的依赖项

最终我找到了 Angular 依赖项,更确切地说是 @angular/material-moment-adapter 已经从版本 11.2.0 升级到 11.2.12(因为我们在 package.json 中允许升级)。


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