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

时间:2020-04-15 06:18:38

标签: angular typescript ivy angular-compiler

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

编译@ angular / animations:es2015 as esm2015编译 @ angular / animations:es2015作为esm2015编译@ angular / core: es2015 as esm2015编译@ angular / core:es2015 as esm2015
编译@ angular / core:将es2015作为esm2015
错误:工作人员5上的错误:TypeError:无法读取null属性'fileName'

然后继续抛出以下错误:

编译@ angular / core:es2015 as 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 as esm2015未处理的异常 发生:NGCC失败。

24 个答案:

答案 0 :(得分:35)

我和我的同事开发人员在本地计算机上遇到此问题(NGCC失败)。

重要的是要指出开发和生产机器运行良好。

为了解决此问题,我们执行了以下步骤:

  1. tsconfig.json 中的 angularCompilerOptions 中已设置(“ enableIvy ”:false)
  2. 将nodeJS更新到最新版本:(执行 node -v 返回v14.3.0)
  3. 已删除 node_modules 文件夹:(在Windows上执行“ rm。\ node_modules \” ,请确保已成功将其删除)
  4. 已安装软件包:(执行 npm i
  5. 此处已​​准备好构建项目。现在,它可以正确构建并运行。

希望这样对您和其他人有帮助。

答案 1 :(得分:21)

在我的特殊情况下,运行后,我的package.json中的 @ angular-devkit / build-angular 已更新为“ ^ 0.1001.2 ” npm审核修复程序。 (此版本似乎属于Angular 10,而不是本地项目的Angular版本(v9.1.7))

还原此更改后,一切又重新开始起作用:

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

答案 2 :(得分:15)

使用终端/ cmd,

第一步: ng更新@ angular / cli @ angular / core

第二步: ng更新

第3步: ng投放

修复我的问题。

注意 您在引导文件夹中的自定义css文件可能会被删除。在更新之前先备份它们,然后将它们放回去!

答案 3 :(得分:9)

尝试删除node_modules文件夹,然后再次运行安装:

rm -rf node_modules
npm install

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

答案 4 :(得分:5)

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

解决方案是降级扩展版本。 (v12.0.0 --> v11.2.14 see here to know how)

答案 5 :(得分:4)

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

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

解决方案2 。智能解决方案-删除锁定文件,如下所示。

Go to `\node_modules\@angular\compiler-cli\ngcc`

找到名为__ngcc_lock_file__的文件,将其删除。 完成。

骇客入侵

答案 6 :(得分:3)

使用node -v检查您的node.js版本。并检查Angular 9是否与它兼容。 将node.js更新到最新的LTS版本(12.8.1)为我工作。 我是用nvm(节点版本管理器)完成的。 找到了一个很好的说明here

答案 7 :(得分:3)

在package.json中将"postinstall": "ngcc"添加到"scripts"中有助于解决此问题

答案 8 :(得分:2)

在我的情况下,我试图运行带有较新版本的node的旧版本的Angular项目。我是这样做的:

删除所有现有的结节模块。

rm -rf node_modules

将节点js更新为最新

npm update
npm install

将角度项目版本更新为最新版本

ng update @angular/core

将项目cli更新到最新版本

ng update @angular/cli

现在开始项目

ng-serve

答案 9 :(得分:2)

设置“ enableIvy”:tsconfig.json中的false确实可以修复该特定错误。 常春藤不应该已经可以使用了吗?

这个答案是我在enter link description here @ clement911答案中找到的,经过大量测试,它对我有用

答案 10 :(得分:1)

这次聚会有点晚了,但对于较旧的 Angular 版本,我设法通过 VS 扩展解决了这个问题。

Angular CLI:6.1.5 节点:8.11.4

Visual studio, angular extension

Agnular view engine

扩展 -> Angular 语言服务(v12.0.2) -> 扩展设置

  • 在 Workspace 下,选中“User Legacy View Engine language service”。

答案 11 :(得分:1)

以防版本不匹配。 检查第一个版本的节点js和angular js

然后写: npm install => :ng服务

如果有端口问题: ng服务器-端口4201

答案 12 :(得分:0)

不存在禁用 IVY 是最佳解决方案的情况。

对于 Windows 用户:

npm i rimraf -g
rimraf node_modules
npm i

答案 13 :(得分:0)

我必须进入tsconfig.spec.json文件并添加

import numpy as np
import time
x = np.random.random((1, 1000))
y = np.random.random((10000, 1000))
y[53] = x

t = time.time()
x_in_y = np.equal(x, y).all(axis=1)  # equal(x, y) returns a row x col matrix of True for matches; all(axis=0) returns a vector len(rows) if the entire row in x == y is true
idx = np.where(x_in_y)  # returns the indicies where x_in_y is true (here 53)
print(time.time() - t)  # 0.019975900650024414

t = time.time()
res = np.mean(x == y, axis=1) == 1
print(time.time() - t)  # 0.03999614715576172

它已经在我的tsconfig.json文件中。

答案 14 :(得分:0)

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

答案 15 :(得分:0)

对我来说,事实证明我们已经使用 package-lock.json 声明的包版本控制有一段时间了,当我由于合并冲突而试图删除它并重新创建它时,错误发生了。当回到旧的 package-lock.json 时,问题就消失了。于是我开始搜索:

  • 比较两者之间的变化
  • 检查生产中是否也出现问题 - 那么它几乎不可能是开发依赖
  • 找出不可能和可能的依赖关系

我最终使用了 Angular 依赖项,更准确地说是在收到更新的@angular/material-moment-adapter(因为我们在 package.json 中允许它) 从版本 11.2.0 到 11.2.12。

答案 16 :(得分:0)

尝试删除 angular-font-awesome 并再次运行安装:

npm 卸载 angular-font-awesome ng 添加@fortawesome/angular-fontawesome@0.6.0

在我删除 fontawesome 后问题解决了,现在 Material Icons 是我的图标选择。 但我应该说感谢 Font Awesome 多年来提供的免费精美图标 :)

答案 17 :(得分:0)

我遇到了这个和其他错误,因为我试图更新 Angular 9 应用程序的一些边缘库。随后在编译过程中出现的错误毫无意义,因为它们无助于纠正错误。

删除“node_modules”和“npm i”的解决方案不起作用,因为即使我有原始的package.json,“npm i”仍然安装不同版本的库——而不是原始版本。不知道 node_modules 中的库究竟是什么。

唯一有帮助的解决方案从备份中恢复 node_modules

否则,如果您需要更新应用程序中的库,请休假并准备一些抗抑郁药,但升级库后几天解决无意义的错误可能仍然无济于事。

答案 18 :(得分: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时,其他2个也降级了。

最后,ionic build成功了!此后,我们过着幸福的生活,直到遇到不同的问题。Working packages for our project

答案 19 :(得分:0)

在我的情况下,我从npm安装了angular-font-awesome软件包,然后进行了引导,它可能会发生冲突,我只是删除了先前安装的angular-font-awesome 然后完成ng build

答案 20 :(得分:0)

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

为我工作

答案 21 :(得分:0)

我通常建议人们在每个成功的部署之后(本地)对项目进行手动备份,因为当您遇到此类问题(与NGCC errors有关的所有问题)时,您可以硬删除{{1} }文件夹,然后从您的node_modules还原它。 然后重新构建。

有时候,当您负担不起将last backup更新到最新版本时,此解决方案将是完美的。

答案 22 :(得分:0)

我有类似的问题,

在我的案例中,将NodeJS更新到新版本很有帮助。

答案 23 :(得分:-1)

用下面的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
  }
}