执行npm i/npm uni时package.json被自动修改是什么原因?如何解决?
问题原因
- npm执行
npm install、npm uninstall这类修改依赖的操作时,会全量重写package.json文件,而非仅修改依赖相关的字段,重写时会遵循npm内置的格式化规则。 - 若本地编辑器、Prettier/ESLint等格式化工具对
package.json的配置(缩进大小、换行符类型、尾逗号规则等)和npm默认规则不一致,npm重写后就会出现不符合你预期的多余空白、格式错乱问题。 - 部分低版本npm存在已知的格式化缺陷,会额外插入无意义的空白行。
可行解决方法
- 对齐格式化规则
将本地编辑器、代码格式化工具的package.json格式化规则调整为和npm默认规则一致:2空格缩进、LF换行符。也可以主动修改npm的格式化配置,避免npm生成不符合你要求的格式:
npm v7及以上版本支持通过配置修改缩进规则,例如设置为4空格缩进执行:npm config set indent 4
设置为tab缩进执行:npm config set indent "\t" - 修复版本缺陷
如果是低版本npm的bug导致的异常空白,直接将npm升级到最新稳定版即可:npm install -g npm@latest - 配置钩子自动修正
可以在package.json的scripts中配置postinstall钩子,每次npm操作完成后自动用你的格式化工具修正格式,例如使用Prettier的配置示例:"scripts": { "postinstall": "prettier --write package.json" } - 更换包管理器
pnpm、yarn这类包管理器修改package.json时不会随意改动用户已有格式,若不想调整npm配置可以切换使用。
问题现象示例

内容的提问来源于stack exchange,提问作者SUUN LEE
相关产品推荐
相关产品推荐

