You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用./mvnw构建Angular项目时出现NGCC失败(ENOENT)错误求助

Angular项目通过mvnw构建失败但本地ng build成功的问题

问题现象

使用./mvnw启动Angular项目时,执行ng build --configuration development抛出NGCC错误,直接本地运行ng build却能成功。

错误日志

Generating browser application bundles (phase: setup)...
[INFO] /home/user/Desktop/project/node_modules/@ngtools/webpack/src/ngcc_processor.js:139
[INFO]             throw new Error(errorMessage + `NGCC failed${errorMessage ? ', see above' : ''}.`);
[INFO]                   ^
[INFO] 
[INFO] Error: spawnSync /home/user/Desktop/project/target/node/node ENOENTNGCC failed, see above.
[INFO]     at NgccProcessor.process (/home/user/Desktop/project/node_modules/@ngtools/webpack/src/ngcc_processor.js:139:19)
[INFO]     at /home/user/Desktop/project/node_modules/@ngtools/webpack/src/ivy/plugin.js:143:27
[INFO]     at Hook.eval [as call] (eval at create (/home/user/Desktop/project/node_modules/tapable/lib/HookCodeFactory.js:19:10), <anonymous>:16:1)
[INFO]     at Hook.CALL_DELEGATE [as _call] (/home/user/Desktop/project/node_modules/tapable/lib/Hook.js:14:14)
[INFO]     at Compiler.newCompilation (/home/user/Desktop/project/node_modules/webpack/lib/Compiler.js:1054:30)
[INFO]     at /home/user/Desktop/project/node_modules/webpack/lib/Compiler.js:1099:29
[INFO]     at eval (eval at create (/home/user/Desktop/project/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:31:1)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE

项目依赖(package.json)

"dependencies": {
    "@angular/animations": "13.1.3",
    "@angular/cdk": "13.1.3",
    "@angular/common": "13.1.3",
    "@angular/compiler": "13.1.3",
    "@angular/core": "^13.1.3",
    "@angular/forms": "13.1.3",
    "@angular/localize": "13.1.3",
    "@angular/material": "13.1.3",
    "@angular/platform-browser": "13.1.3",
    "@angular/platform-browser-dynamic": "13.1.3",
    "@angular/router": "13.1.3",
    "@fortawesome/angular-fontawesome": "^0.10.1",
    "@fortawesome/fontawesome-common-types": "^6.1.1",
    "@fortawesome/fontawesome-svg-core": "^6.1.1",
    "@fortawesome/free-regular-svg-icons": "^6.1.1",
    "@fortawesome/free-solid-svg-icons": "^6.1.1",
    "@ng-bootstrap/ng-bootstrap": "11.0.0",
    "@ngqp/core": "^13.0.0",
    "@ngx-translate/core": "14.0.0",
    "@ngx-translate/http-loader": "7.0.0",
    "ajv": "^8.10.0",
    "angular-tag-cloud-module": "^13.0.0",
    "bootstrap": "4.6.1",
    "dayjs": "1.10.7",
    "emoji-toolkit": "^6.6.0",
    "katex": "^0.15.2",
    "lodash": "^4.17.21",
    "moment": "^2.29.1",
    "ngx-cookie-service": "^13.1.2",
    "ngx-infinite-scroll": "10.0.1",
    "ngx-markdown": "^13.0.0",
    "ngx-webstorage": "9.0.0",
    "rxjs": "^7.5.5",
    "swagger-ui-dist": "4.2.1",
    "ts-color-class": "^0.10.1",
    "tslib": "2.3.1",
    "webpack-cli": "^4.10.0",
    "zone.js": "0.11.4"
  },
  "devDependencies": {
    "@angular-builders/custom-webpack": "13.0.0",
    "@angular-builders/jest": "13.0.2",
    "@angular-devkit/build-angular": "13.1.3",
    "@angular-eslint/eslint-plugin": "13.0.1",
    "@angular/cli": "13.3.8",
    "@angular/compiler-cli": "13.1.3",
    "@angular/service-worker": "13.1.3",
    "@types/chai": "4.2.14",
    "@types/chai-string": "1.4.2",
    "@types/jest": "27.4.0",
    "@types/lodash": "^4.14.178",
    "@types/mocha": "8.2.0",
    "@types/node": "16.11.21",
    "@types/selenium-webdriver": "4.0.11",
    "@typescript-eslint/eslint-plugin": "5.10.0",
    "@typescript-eslint/parser": "5.10.0",
    "browser-sync": "2.27.7",
    "browser-sync-webpack-plugin": "2.3.0",
    "chai": "4.2.0",
    "chai-as-promised": "7.1.1",
    "chai-string": "1.5.0",
    "concurrently": "7.0.0",
    "copy-webpack-plugin": "10.2.1",
    "eslint": "8.5.0",
    "eslint-config-prettier": "8.3.0",
    "eslint-webpack-plugin": "3.1.1",
    "folder-hash": "4.0.1",
    "generator-jhipster": "7.6.0",
    "husky": "7.0.4",
    "jest": "27.4.7",
    "jest-date-mock": "1.0.8",
    "jest-junit": "13.0.0",
    "jest-preset-angular": "11.0.1",
    "jest-sonar-reporter": "2.0.0",
    "lint-staged": "12.2.2",
    "merge-jsons-webpack-plugin": "2.0.1",
    "mocha": "8.2.1",
    "prettier": "^2.5.1",
    "prettier-plugin-java": "1.6.1",
    "prettier-plugin-packagejson": "2.2.15",
    "protractor": "7.0.0",
    "rimraf": "3.0.2",
    "ts-jest": "27.1.3",
    "ts-node": "9.1.1",
    "typescript": "4.5.4",
    "wait-on": "6.0.0",
    "webdriver-manager": "12.1.8",
    "webpack-bundle-analyzer": "4.5.0",
    "webpack-merge": "5.8.0",
    "webpack-notifier": "1.15.0"
  },
  "engines": {
    "node": ">=16.13.1"
  },
  "cacheDirectories": [
    "node_modules"
  ],
  "jestSonar": {
    "reportPath": "target/test-results/jest",
    "reportFile": "TESTS-results-sonar.xml"
  },
  "overrides": {
    "webpack": "5.66.0"
  }

已尝试的无效操作

  • 修改Ivy编译器选项为true或false
  • 删除/更新第三方依赖包
  • 重建前删除package-lock.json和node_modules

解决建议

  • 检查Maven Node插件配置:错误提示找不到/home/user/Desktop/project/target/node/node,说明Maven在构建时尝试使用target目录下的Node环境,但该文件不存在。确认frontend-maven-plugin的配置,确保Node版本符合项目engines要求(>=16.13.1),且插件能正确下载Node到指定路径。
  • 强制Maven使用本地Node环境:在Maven配置中添加参数,让构建直接调用本地已安装的Node,而非下载到target目录。可以在pom.xml的frontend-maven-plugin里设置nodeDownloadRoot为本地Node路径,或者添加系统属性node.executable指定本地Node的绝对路径。
  • 清理Maven缓存:执行./mvnw clean install -U强制更新依赖,同时清理Maven本地仓库中可能损坏的Node包缓存。
  • 检查权限问题:确认当前用户对/home/user/Desktop/project/target目录有读写权限,避免Node下载时因权限不足导致文件缺失。
  • 锁定Node版本:在.nvmrc文件中指定项目使用的Node版本(如16.13.1),然后通过nvm切换到对应版本,再执行Maven构建,确保本地和Maven使用的Node版本一致。
  • 禁用NGCC自动处理:在angular.json的build配置中添加"skipNgcc": true,跳过NGCC处理。注意此方法仅适用于所有依赖都已兼容Ivy的情况,需要确认项目依赖均支持Ivy。

内容的提问来源于stack exchange,提问作者Eduard Frankford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 07:54:19