如何永久固定npm-shrinkwrap的lockfileVersion为v1,避免自动升级为v2?
永久解决lockfileVersion版本不匹配报错方案
这个报错本质是不同环境使用的npm版本不一致:npm 7.x及以上版本默认生成lockfileVersion@2格式的package-lock.json,而npm 6.x及更低版本仅支持lockfileVersion@1格式。之前的降级操作只是临时修改了lockfile格式,后续本地用高版本npm安装依赖时又会重新生成v2格式的文件,所以问题反复出现。
以下两种方案任选其一即可实现永久修复:
方案1:统一所有环境使用npm 7.x及以上版本(更推荐,不会损失npm新特性)
- 先确认本地npm版本,执行
npm -v确认是7.x+,如果不是执行npm install -g npm@latest升级 - 修改GitHub Actions配置文件(一般存放在
.github/workflows/目录下的yml文件),在安装依赖步骤前添加升级npm的命令:- name: 升级npm到最新版本 run: npm install -g npm@latest - 如果是Docker镜像构建,在Dockerfile的安装依赖步骤前添加升级npm的指令:
RUN npm install -g npm@latest
操作完成后所有环境都使用高版本npm,直接兼容v2格式的lockfile,不需要再修改lockfile版本。
- 先确认本地npm版本,执行
方案2:强制所有环境统一生成
lockfileVersion@1格式的文件
如果你不方便升级CI/Docker的npm版本,可以强制本地高版本npm生成v1格式的lockfile:- 你可以选择执行命令生成配置:
也可以手动在项目根目录新建npm config set lockfile-version 1 --location project.npmrc文件,写入以下内容:
两种方式效果一致,该配置会强制当前项目下执行lockfile-version=1npm install时生成v1版本的lockfile。将.npmrc提交到代码仓库后,所有协作者的本地环境、CI/CD环境都会自动沿用该配置,不会再生成v2格式的文件。 - 配置完成后重新执行一次
npm install生成符合要求的lockfile,提交到仓库即可。
- 你可以选择执行命令生成配置:
内容的提问来源于stack exchange,提问作者Kevin Martin
相关产品推荐
相关产品推荐

