通过npm脚本执行npm install为何修改package.json依赖?如何阻止?
为什么npm安装本地tgz包会自动写入package.json?如何阻止?
原因分析
从npm 5.x版本开始,官方就调整了默认行为:不管你是否添加--save或--save-dev参数,npm install命令都会自动将安装的包添加到package.json的dependencies中。这个设计是为了简化依赖管理,确保项目的依赖声明和实际安装的包保持一致。
哪怕你安装的是本地打包好的.tgz文件,这个默认规则依然生效——npm会把本地文件路径作为依赖版本写入dependencies,就像你遇到的"my-package": "file:my-package-0.0.0.tgz"这样。
解决办法
如果你只想把包安装到node_modules,不想修改package.json,可以用以下两种方式:
临时禁用自动保存(推荐):修改你的
install-package脚本,添加--no-save参数:"scripts": { "pack-package": "npm pack ./dist", "install-package": "npm install my-package-0.0.0.tgz --no-save" }运行
npm run install-package后,包会正常安装到node_modules,但package.json的dependencies不会被修改。全局禁用自动保存(谨慎使用):如果你希望所有
npm install命令都默认不写入package.json,可以执行:npm config set save false注意:这个设置会影响你所有的npm项目,除非你确实需要全局生效,否则更推荐第一种临时方式。
内容的提问来源于stack exchange,提问作者dhilt
相关产品推荐
相关产品推荐

