npm install无法正确忽略devDependencies问题求助
我的package.json依赖配置如下:
"dependencies": { "@loopback/apiconnect": "^0.11.0", "@loopback/authentication": "^10.1.2", "@loopback/boot": "^6.0.0", "@loopback/core": "^5.0.0", "@loopback/repository": "^6.1.2", "@loopback/rest": "^13.0.0", "@loopback/security": "^0.10.2", "@loopback/service-proxy": "^6.0.0", "compression": "^1.7.4", "helmet": "^7.0.0", "ldapauth-fork": "^5.0.5", "loopback-connector-db2": "^2.2.3", "pino": "^8.15.0", "pino-http": "^8.4.0", "pino-syslog": "^3.0.0", "rate-limiter-flexible": "^2.4.2", "tslib": "^2.0.0" }, "devDependencies": { "@loopback/build": "^10.0.0", "@loopback/eslint-config": "^14.0.0", "@loopback/testlab": "^6.0.0", "@types/compression": "^1.7.2", "@types/express": "^4.17.17", "@types/node": "^14.18.47", "@types/pino-http": "^5.8.1", "eslint": "^8.40.0", "source-map-support": "^0.5.21", "typescript": "~4.9.5" }
执行npm install --omit dev、npm install --omit=dev或npm install --production命令后,node_modules文件夹仍包含所有开发依赖包,但执行npm ls --all --omit dev时,依赖树能正确忽略开发依赖,导致测试及生产环境部署包体积过大。
- npm配置覆盖了命令参数
检查当前npm的生产模式配置:npm config get production npm config get omit
如果production返回false,或者omit中未包含dev,会导致安装命令的参数被全局配置覆盖。可以:
临时强制执行生产安装:
npm install --omit dev --force临时启用生产模式安装:
npm install --production --force若需长期修改配置,执行
npm config set production true(后续恢复开发环境可执行npm config set production false)缓存或锁文件残留
之前的安装残留可能导致dev依赖未被清理:- 删除现有node_modules目录:
# Linux/Mac rm -rf node_modules # Windows rmdir /s /q node_modules - 删除package-lock.json文件:
rm package-lock.json - 清理npm缓存:
npm cache clean --force - 重新执行生产安装命令:
npm install --omit dev
- 删除现有node_modules目录:
npm版本兼容性问题
--omit参数是npm 7及以上版本才支持的特性,若使用低版本npm,参数不会生效。执行npm -v查看版本,低于7的话升级npm:npm install -g npm@latest检查是否有dev依赖被生产依赖间接引入
部分dev依赖可能被生产依赖作为子依赖引入,可通过以下命令排查:npm ls [dev依赖包名]
比如检查@loopback/build:npm ls @loopback/build,若显示被某个production依赖引用,那该dev依赖会被自动安装,这种情况需评估是否要调整依赖配置。
内容的提问来源于stack exchange,提问作者thegreatjedi

