如果两个不同的开发人员在最初使用包锁创建的项目中使用不同版本的node(12/15)和npm(6/7)。json "lockfileVersion": 1,当开发者使用npm 7x安装新包时,似乎包锁。使用"lockfileVersion": 2重新创建json。

这似乎给使用npm v6的开发人员带来了问题,因为它试图与lockfileVersion 2一起工作,但它最终产生了新的差异。

npm WARN read-shrinkwrap这个版本的npm与lockfileVersion@1兼容,但是package-lock。json为lockfileVersion@2生成。我会尽力做到最好的!

有没有办法指定新版本的npm只使用"lockfileVersion": 1?还是说我们必须让所有的开发者使用同一个版本的npm?


当前回答

有一个比使用nvm更简单的解决方案:

npx npm@6.14.17 i --save

有了这个,你可以用版本1生成一个新的锁文件,使用最新的node js版本,你不需要在你的机器上改变任何东西。

其他回答

锁文件的构造取决于NPM版本。V7 +将创建锁文件2,下面将创建锁文件v1。

Lockfile v2是向后兼容的,所以运行npm < v6的人可以使用它,但我在我的第二个屏幕上看到一个圆形构建失败,这表明我们使用的一些npm包与Lockfile v2不兼容…例如,旧的NPM包可能不能很好地维护和兼容lockfile v2。

因此,最好的办法可能是把你的环境隔离起来。

这就是docker被发明的原因!让你的项目在docker容器中运行,然后使用makefile命令来构建你的项目,或者类似的东西

.PHONY: up
up:
    $(MAKE) down
    docker-compose up -d
    $(MAKE) logs

使用合成文件来设置项目,然后依赖于make <insert命令>来运行/构建项目。可以使用make shell命令进入一个shell环境,在这个环境中,所有的开发者都拥有相同的npm / node版本。NPM I -g npm@latest不是一个答案,因为它只是将NPM安装在它运行的任何地方,所以新的开发人员仍然必须运行这个命令,除非它是构建的一部分。

有一个比使用nvm更简单的解决方案:

npx npm@6.14.17 i --save

有了这个,你可以用版本1生成一个新的锁文件,使用最新的node js版本,你不需要在你的机器上改变任何东西。

尝试移除包锁。然后再次运行NPM install。

从8.1.0版本开始,在npm中有一个标志——lockfile-version,你可以用它来覆盖默认的锁文件版本:

npm i --lockfile-version 3

这是原始PR的链接。

npm WARN read-shrinkwrap这个版本的npm与lockfileVersion@1兼容,但是package-lock。json为lockfileVersion@2生成。我会尽力做到最好的!

为了解决此问题,可以使用该命令

npm i -g npm@latest

全局和运行命令

npm i npm@latest

在项目文件中帮我解决了这个问题。