Angular项目执行ng s时@angular/router模块构建失败求助
问题描述
执行ng s(或ng serve)启动Angular项目时,触发以下模块构建失败错误:
./node_modules/@angular/router/fesm2022/router.mjs - Error: Module build failed (from ./node_modules/@angular-devkit/build-angular/src/tools/babel/webpack-loader.js):
TypeError: E:\Downloads\SpringBootProjects\AngularNgPrime\client\node_modules@angular\router\fesm2022\router.mjs: Cannot read properties of undefined (reading 'file')
已尝试的操作:
- 删除并重新安装
node_modules - 更换新文件夹重新创建项目
问题仍未解决。
项目package.json配置如下:
{ "name": "client", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "watch": "ng build --watch --configuration development", "test": "ng test" }, "private": true, "dependencies": { "@angular/animations": "^14.2.0", "@angular/common": "^14.2.0", "@angular/compiler": "^14.2.0", "@angular/core": "^14.2.0", "@angular/forms": "^14.2.0", "@angular/platform-browser": "^14.2.0", "@angular/platform-browser-dynamic": "^14.2.0", "@angular/router": "^14.2.0", "rxjs": "~7.5.0", "tslib": "^2.3.0", "zone.js": "~0.11.4" }, "devDependencies": { "@angular-devkit/build-angular": "^14.2.12", "@angular/cli": "~14.2.12", "@angular/compiler-cli": "^14.2.0", "@types/jasmine": "~4.0.0", "jasmine-core": "~4.3.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.0.0", "typescript": "~4.7.2" } }
解决方案
针对该报错,可尝试以下修复方式:
1. 降级@angular-devkit/build-angular版本
当前使用的@angular-devkit/build-angular@14.2.12存在babel-loader相关已知bug,将其锁定到14.2.11版本:
修改package.json中的对应依赖:
"@angular-devkit/build-angular": "14.2.11"
然后执行清理与重装操作:
# Windows系统执行 rmdir /s/q node_modules del package-lock.json npm install # macOS/Linux系统执行 rm -rf node_modules package-lock.json npm install
2. 匹配Node.js版本
Angular 14推荐使用Node.js 14.x或16.x LTS版本,若当前Node.js版本过高(如18+)可能引发兼容性问题,切换到16.x LTS版本后重新安装依赖并启动项目。
3. 禁用构建缓存
在angular.json中添加配置禁用缓存:
"architect": { "build": { "options": { "cache": false } }, "serve": { "options": { "cache": false } } }
修改后重新执行ng serve。
4. 清除Angular CLI缓存
执行命令清除CLI缓存:
ng cache clean --all
完成后重新启动项目。
内容的提问来源于stack exchange,提问作者sathish kumar

