如果两个不同的开发人员在最初使用包锁创建的项目中使用不同版本的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?
据我所知,npm文档说npm v6将与版本2的锁文件一起工作,尽管有警告,所以你不需要做任何在接受的答案中建议的事情,可以安全地忽略警告消息。
在npm 7发布说明中,他们说:
需要注意的一个变化是新的lockfile格式,即
向后兼容NPM 6用户。锁文件v2解锁
能够进行确定的和可复制的构建以生成
包树。
在npm文档中,它说(我的重点):
lockfileVersion
An integer version, starting at 1 with the version number of this
document whose semantics were used when generating this
package-lock.json.
Note that the file format changed significantly in npm v7 to track
information that would have otherwise required looking in node_modules
or the npm registry. Lockfiles generated by npm v7 will contain
lockfileVersion: 2.
No version provided: an "ancient" shrinkwrap file from a version of npm prior to npm v5.
1: The lockfile version used by npm v5 and v6.
2: The lockfile version used by npm v7, which is backwards compatible to v1 lockfiles.
3: The lockfile version used by npm v7, without backwards compatibility affordances. This is used for the hidden lockfile at
node_modules/.package-lock.json, and will likely be used in a future
version of npm, once support for npm v6 is no longer relevant.
这就是为什么他们可以自动将锁文件从v1升级到v2,而不会破坏任何东西。
锁文件的构造取决于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(>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。我希望它能有所帮助。