如果两个不同的开发人员在最初使用包锁创建的项目中使用不同版本的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安装在它运行的任何地方,所以新的开发人员仍然必须运行这个命令,除非它是构建的一部分。

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

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

npm i -g npm@latest

全局和运行命令

npm i npm@latest

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

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

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

npx npm@6.14.17 i --save

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

我今天遇到了同样的问题。我正在和一个开发人员一起开发一个不同版本的npm(>7)的项目,我遇到了同样的问题。我只是把我的npm版本升级到上面提到的其他开发人员正在使用的最新版本。 以下是升级npm的步骤(适用于windows):

首先,通过从升级的PowerShell运行以下命令,确保您可以在系统上执行脚本。以管理员身份运行PowerShell,单击“开始”,搜索“PowerShell”,右键单击“PowerShell”,选择“以管理员身份运行”。

接下来执行以下命令:

Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force

然后,要安装和使用这个升级工具,运行以下命令(也是从升级的PowerShell或cmd.exe)。注意:该工具至少需要Node v8

npm install --global --production npm-windows-upgrade
npm-windows-upgrade

只想安装最新版本?肯定的:

npm-windows-upgrade --npm-version latest

现在您可以从命令行中选择要安装的版本。

https://github.com/felixrieseberg/npm-windows-upgrade

上面的链接就是我使用过的工具。这个工具既适用于Linux又适用于Windows。我希望它能有所帮助。