npm run build 报错如下
> cross-env NODE_ENV=production webpack --config ./build/webpack.config.prod.js
events.js:377
throw er; // Unhandled 'error' event
^
Error: spawn webpack ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:274:19)
at onErrorNT (internal/child_process.js:469:16)
at processTicksAndRejections (internal/process/task_queues.js:82:21)
Emitted 'error' event on ChildProcess instance at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:280:12)
at onErrorNT (internal/child_process.js:469:16)
at processTicksAndRejections (internal/process/task_queues.js:82:21) {
errno: -2,
code: 'ENOENT',
syscall: 'spawn webpack',
path: 'webpack',
spawnargs: [ '--config', './build/webpack.config.prod.js' ]
}
查看依赖 webpack 等依赖项是否安装
这个问题的根源,是项目的依赖没有正确的添加和维护,有同学通过 npm i -f
的形式规避了依赖安装报错的问题,此种方式同时也会生成对应的 package-lock.json 文件,该项目在特定的 node 版本下还能让项目正常的构建成功,就有些莫名所以。
仅对项目做大体描述:(node@16.13.1 && npm@8)
- 项目内的多个依赖包设定有
peerDependencies
- 项目自身并没有安装
peerDependencies
要求的包 - 常规安装会报错 npm i
- 通过 npm i -f 安装依赖能成功
- 切换 node@16.16.0 版本后,已经有 lock,使用 npm i 安装依赖会存在问题
参考文档:
- https://blog.csdn.net/qq_37682202/article/details/105060777
- https://stackoverflow.com/questions/43230346/error-spawn-npm-enoent
- https://stackoverflow.com/questions/71155707/pdfjs-dist-package-problem-while-build-process
- https://stackoverflow.com/questions/66020820/npm-when-to-use-force-and-legacy-peer-deps