如何解决Angular项目ng s启动时的TypeError: Cannot read 'lookup'问题
问题描述
克隆新Angular项目后,npm install执行成功,但运行ng s启动应用时出现以下错误,怀疑是否与Node.js版本有关:
\node_modules\express\lib\response.js:789 var charset = mime.charsets.lookup(value.split(';')[0]); ^ TypeError: Cannot read properties of undefined (reading 'lookup') at ServerResponse.header (C:\Users\N121075\class-ui\node_modules\express\lib\response.js:789:37) at setHeaderForResponse (C:\Users\N121075\class-ui\node_modules\webpack-dev-server\node_modules\webpack-dev-middleware\dist\utils\compatibleAPI.js:94:9) at processRequest (C:\Users\N121075\class-ui\node_modules\webpack-dev-server\node_modules\webpack-dev-middleware\dist\middleware.js:142:11) at ready (C:\Users\N121075\class-ui\node_modules\webpack-dev-server\node_modules\webpack-dev-middleware\dist\utils\ready.js:17:5) at middleware (C:\Users\N121075\class-ui\node_modules\webpack-dev-server\node_modules\webpack-dev-middleware\dist\middleware.js:69:5) at Layer.handle [as handle_request] (C:\Users\N121075\class-ui\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (C:\Users\N121075\class-ui\node_modules\express\lib\router\index.js:328:13) at C:\Users\N121075\class-ui\node_modules\express\lib\router\index.js:286:9 at Function.process_params (C:\Users\N121075\class-ui\node_modules\express\lib\router\index.js:346:12) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\index.js:280:10) at Server.setHeaders (C:\Users\N121075\class-ui\node_modules\webpack-dev-server\lib\Server.js:2944:5) at Layer.handle [as handle_request] (C:\Users\N121075\class-ui\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (C:\Users\N121075\class-ui\node_modules\express\lib\router\index.js:328:13) at C:\Users\N121075\class-ui\node_modules\express\lib\router\index.js:286:9 at param (C:\Users\N121075\class-ui\node_modules\express\lib\router\index.js:365:14) at param (C:\Users\N121075\class-ui\node_modules\express\lib\router\index.js:376:14) at Function.process_params (C:\Users\N121075\class-ui\node_modules\express\lib\router\index.js:421:3) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\index.js:280:10) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:136:14) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) at C:\Users\N121075\class-ui\node_modules\webpack-dev-server\lib\Server.js:1948:18 at Layer.handle [as handle_request] (C:\Users\N121075\class-ui\node_modules\express\lib\router\layer.js:95:5) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:144:13) at next (C:\Users\N121075\class-ui\node_modules\express\lib\router\route.js:140:7) Node.js v18.14.0
已安装版本信息:
- Angular CLI: 15.2.9
- Node: 18.14.0
- Package Manager: npm 9.3.1
- OS: win32 x64
问题分析与解决方案
这个错误不是Node.js版本导致的,Angular 15官方支持Node.js 14.20+、16.13+、18.10+,你的18.14.0完全符合要求。
错误根源是依赖版本冲突:旧版express依赖mime包的charsets.lookup方法,但mime v2.x及以上版本移除了这个API,项目中安装的mime版本过高,导致调用失败。
解决方法如下:
方法1:降级mime到兼容版本
执行命令强制安装兼容的mime v1.x版本:
npm install mime@1.6.0 --save-dev
方法2:使用npm overrides锁定mime版本
在项目根目录的package.json中添加overrides字段,强制所有依赖使用指定的mime版本:
{ "overrides": { "mime": "1.6.0" } }
添加后重新执行npm install,再启动项目。
方法3:升级相关依赖(可选)
如果项目允许,可以尝试升级webpack-dev-server或express到兼容mime v2+的版本,但因为这些是Angular CLI的间接依赖,可能需要同步升级Angular CLI版本到更稳定的小版本(比如15.2.x的最新版),执行:
npm install @angular/cli@15.2.11 --save-dev
然后重新安装依赖并启动项目。
内容的提问来源于stack exchange,提问作者Nancy
相关产品推荐
相关产品推荐

