Angular 9 - NGCC 因未处理的异常而失败

kay*_*234 63 ivy typescript angular angular-compiler

在将依赖项升级到 Angular 9(并执行必要的代码更改)后构建应用程序会引发错误:

编译@angular/animations : es2015 as esm2015 编译@angular/animations : es2015 as esm2015 编译@angular/core : es2015 as esm2015 编译@angular/core : es2015 as esm2015 as esm2015
编译
错误:@angular es102015 #5:类型错误:无法读取 null 的属性“fileName”

然后继续抛出以下错误:

编译@angular/core : es2015 as esm2015 编译@angular/compiler/testing : es2015 as esm2015 编译@angular/core : es2015 as esm2015
错误:试图用anonybyakts编写node_modules/@angular/core.cc_ivyakts ngcc 备份文件,但它已经存在,所以不写,也不备份,node_modules/@angular/core/core.d.ts。

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

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

Flo*_*lip 71

我和我的同事开发人员在我们的 localhost 机器上遇到了这个问题(NGCC 失败)。

重要的是要注意 dev 和 prod 机器运行良好。

为了解决这个问题,我们遵循了以下步骤:

  1. tsconfig.json 中,在angularCompilerOptions中设置了 (" enableIvy ": false)
  2. 将nodeJS更新到最新版本:(执行node -v返回v14.3.0)
  3. 已删除node_modules文件夹:(在 windows 上执行“rm .\node_modules\”,确保已成功删除)
  4. 已经安装了软件包:(执行npm i
  5. 在这里,项目已准备好建造。它现在构建和运行没有错误。

我希望这对您和其他人在这种情况下有所帮助。

  • 设置 `"enableIvy":false` 对我有用 (25认同)
  • 当项目构建后会产生更大的包时,将“enableIvy”设置为 false 如何成为一个解决方案? (13认同)
  • 重新安装node_modules对我来说是这样 (12认同)

Bas*_*Que 44

在我的特殊情况下,@angular-devkit/build-angular在运行npm audit fix后在我的 package.json 中更新为“ ^0.1001.2 ” 。(这个版本好像属于angular 10,而不是本地项目的angular版本(v9.1.7))

恢复此更改后,一切又开始工作:

“@angular-devkit/build-angular”:“ ~0.901.6

  • 我有完全相同的问题。 (2认同)

Rez*_*aba 21

使用终端/cmd,

第一步:

ng update @angular/cli @angular/core
Run Code Online (Sandbox Code Playgroud)

第二步:

ng update
Run Code Online (Sandbox Code Playgroud)

第三步:

ng serve
Run Code Online (Sandbox Code Playgroud)

固定我的。

注意 bootstrap 文件夹中的自定义 css 文件可能会被删除。在更新之前备份它们并在更新后将它们放回原处!

  • 为什么正确的答案是更改 ng 版本?这一决定不应轻易做出。 (11认同)

Jac*_*iol 13

尝试删除该node_modules文件夹并再次运行安装:

rm -rf node_modules
Run Code Online (Sandbox Code Playgroud)
npm install
Run Code Online (Sandbox Code Playgroud)

对我来说它已经解决了这个问题。

  • 您不必删除整个“node_modules”,“node_modules/@angular”文件夹就足够了。但是,无论如何,不​​要忘记“npm i”。 (2认同)

Jij*_*tus 12

这个问题是因为你可能在任何端口上运行你的应用程序,并且 angular ngcc 被分配了一个特定的进程 id,该进程 id 被指定并锁定在一个名为__ngcc_lock_file__inside的文件中 \node_modules\@angular\compiler-cli\ngcc。如果您正在关闭硬系统或您的操作系统崩溃,则此锁定文件将位于 node_modules.h 中。一旦您打开机器并尝试再次启动应用程序,angular cli 将检查此锁定文件并尝试查找文件中指定的进程 ID。大多数情况下,由于您重新启动了完整的机器,该进程 ID 将丢失,并且会引发此错误。

解决方案 1。删除node_modules并执行 npm install

解决方案2。聪明的解决方案 - 删除锁定文件,如下所示。

Go to `\node_modules\@angular\compiler-cli\ngcc`
Run Code Online (Sandbox Code Playgroud)

找到名为__ngcc_lock_file__删除它的文件。完毕。

快乐黑客


Eka*_*eva 6

添加"postinstall": "ngcc""scripts"package.json 帮助我解决了这个问题

  • 对我有用,IMO 的最佳解决方案。 (3认同)

Mei*_*eir 5

在文件tsconfig.json中设置"enableIvy": false确实修复了该特定错误。Ivy 应该已经可以使用了。

我在clement911 对Error after update to version 9 #36060的回答中发现了这一点,经过大量测试后它对我有用。


Pat*_* M. 5

在我的情况下,添加enableIvy: false并没有解决问题,这与 vsCode 的 Angular 语言服务扩展有关(看起来它实际上并未考虑该参数)。

解决方案是降级扩展版本。(v12.0.0 --> v11.2.14请看这里了解如何)