执行npm run start报错:webpack_dev_server_1.default.addDevServerEntrypoints不是函数
为修复漏洞,我在package.json的resolutions字段中添加了相关配置,执行npm install和npm run build均正常,但运行npm run start时出现如下错误:
Your global Angular CLI version (12.2.18) is greater than your local version (12.2.17). The local Angular CLI version is used. To disable this warning use "ng config -g cli.warnings.versionMismatch false". - Generating browser application bundles (phase: setup)...An unhandled exception occurred: webpack_dev_server_1.default.addDevServerEntrypoints is not a function See "C:\Users\330\AppData\Local\Temp\ng-FEY8TL\angular-errors.log" for further details. npm ERR! code ELIFECYCLE npm ERR! syscall spawn npm ERR! file C:\WINDOWS\system32\cmd.exe npm ERR! errno ENOENT npm ERR! trade-capture-ui@0.0.0 start: `ng serve` npm ERR! npm ERR! Failed at the trade-capture-ui@0.0.0 start script.
我怀疑是webpack-dev-server与Angular版本不兼容导致的,尝试删除node_modules和package-lock.json后重新执行npm install,结果出现了更多错误。我是Angular和Nest.js的新手,以下是我的package.json文件:
{ "dependencies": { "@angular/animations": "~12.2.0", "@angular/cdk": "^12.2.13", "@angular/common": "~12.2.0", "@angular/compiler": "~12.2.0", "@angular/core": "~12.2.0", "@angular/forms": "~12.2.0", "@angular/material": "^12.2.13", "@angular/platform-browser": "~12.2.0", "@angular/platform-browser-dynamic": "~12.2.0", "@angular/router": "~12.2.0", "@rig/common": "4.4.1", "@rig/ng-core-components": "4.4.1", "@rig/ng-core-navigation": "^4.3.0", "@rig/pcb-web-theme": "4.1.0", "@rig/styles": "4.4.0", "colortranslator": "^1.9.3", "rxjs": "~6.6.0", "tslib": "^2.3.0", "xml-formatter": "^2.6.1", "zone.js": "~0.11.4" }, "devDependencies": { "@angular-builders/jest": "^15.0.0", "@angular-devkit/build-angular": "~12.2.18", "@angular/cli": "~12.2.16", "@angular/compiler-cli": "~12.2.0", "@types/jasmine": "~3.8.0", "@types/jest": "^29.2.4", "@types/node": "^18.11.17", "jasmine-core": "~3.8.0", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", "jest-junit": "^15.0.0", "jest-preset-angular": "12.2.3", "jest-sonar-reporter": "^2.0.0", "loader-utils": "^2.0.4", "moment": "2.29.4", "prettier": "^1.19.1", "ts-jest": "^29.0.3", "typescript": "~4.3.5", "webpack-dev-server": "4.11.1", "html-loader": "4.2.0" }, "jest": { "preset": "jest-preset-angular", "setupTestFrameworkScriptFile": "<rootDir>/setupJest.ts" }, "jestSonar": { "reportPath": "../coverage" }, "resolutions": { "webpack-dev-server": "4.11.1", "loader-utils": "^2.0.4", "babel-loader": "8.2.5", "json5": "2.2.2", "minimatch": "3.0.5", "glob-parent": "6.0.2", "http-cache-semantics": "4.1.1", "webpack": "5.76.0", "webpack-sources": "^3.2.3", "ejs": "3.1.9", "tough-cookie": "4.1.3", "semver": "7.5.2", "escodegen": "2.1.0", "@babel/traverse": "7.23.2" } }
你的判断完全正确,核心问题是Angular 12与webpack-dev-server 4.x版本不兼容。Angular 12配套的@angular-devkit/build-angular 12.x版本依赖webpack-dev-server 3.x,强行升级到4.x会导致API不匹配(比如addDevServerEntrypoints方法在4.x中已被移除或重构)。
按以下步骤修复:
移除resolutions中的强制版本配置
从package.json的resolutions字段中删除以下两行,避免强制锁定不兼容的版本:"webpack-dev-server": "4.11.1", "webpack": "5.76.0",降级webpack-dev-server到兼容版本
将devDependencies里的webpack-dev-server从4.11.1改为Angular 12推荐的稳定版本3.11.3:"webpack-dev-server": "3.11.3"清理依赖并重新安装
执行以下命令彻底清理旧依赖并重新安装:# Windows系统执行 del /s /q node_modules && del package-lock.json # macOS/Linux系统执行 rm -rf node_modules package-lock.json npm install统一Angular构建工具版本(可选但推荐)
你的项目中@angular/cli是12.2.16,@angular-devkit/build-angular是12.2.18,差异不大,但最好保持同版本,将@angular/cli也改为~12.2.18,避免潜在的版本冲突。
额外提示:
- 不要随意升级Angular核心版本之外的构建工具,尤其是webpack、webpack-dev-server这类与Angular构建深度绑定的依赖。
- 修复漏洞时优先选择Angular官方发布的安全补丁版本,比如将所有
@angular/*依赖从~12.2.0升级到~12.2.18,这样既能修复官方已知漏洞,又能避免依赖冲突。
内容的提问来源于stack exchange,提问作者nightcrewx

