使用./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
相关产品推荐
相关产品推荐

