如果两个不同的开发人员在最初使用 a 创建的项目中使用不同版本的 node (12/15) 和 npm (6/7) package-lock.json "lockfileVersion": 1,当使用 npm 7x 的开发人员安装新包时,似乎package- lock.json是使用重新创建的"lockfileVersion": 2.
package-lock.json
"lockfileVersion": 1
package- lock.json
"lockfileVersion": 2
这似乎会给使用 npm v6 的开发人员带来问题,因为它尝试使用 . lockfileVersion 2,但最终会产生新的差异。
lockfileVersion 2
npm WARN read-shrinkwrap 这个版本的 npm 兼容 lockfileVersion@1,但是 package-lock.json 是为 lockfileVersion@2 生成的。我会尽力做到最好的!
有什么方法可以指定仅使用的npm较 新 版本"lockfileVersion": 1?还是我们只需要让所有开发人员都使用相同版本的npm?
npm
有什么方法可以指定npm仅使用的较新版本"lockfileVersion": 1?还是我们只需要让所有开发人员都使用相同版本的npm?
我会建议你固定 Node/NPM 版本,并在你的环境(开发、登台和生产)中调整它。
您可以nvm通过添加到项目.nvmrc文件中来管理节点版本(不要忘记将其存储在源代码管理中)。
nvm
.nvmrc
例如,.nvmrc看起来像:
$ cat .nvmrc 14.15.0
然后,您可以使用nvm install && nvm use固定版本的 Node.js。
nvm install && nvm use
NPM 还支持engines:
engines
您可以指定您的东西适用的节点版本: { "engines" : { "node" : ">=0.10.3 <0.12" } } 并且,与依赖项一样,如果您不指定版本(或者如果您指定“*”作为版本),那么任何版本的 Node 都可以。 如果您指定“引擎”字段,则 npm 将要求“节点”位于该列表中的某个位置。如果省略“engines”,那么 npm 将假设它在 Node.js 上工作。 您还可以使用“引擎”字段来指定哪些版本的 npm 能够正确安装您的程序。例如: { "engines" : { "npm" : "~1.0.20" } } 除非用户设置了 engine-strict 配置标志,否则该字段仅是建议性的,并且只会在您的软件包作为依赖项安装时产生警告。
您可以指定您的东西适用的节点版本:
{ "engines" : { "node" : ">=0.10.3 <0.12" } }
并且,与依赖项一样,如果您不指定版本(或者如果您指定“*”作为版本),那么任何版本的 Node 都可以。
如果您指定“引擎”字段,则 npm 将要求“节点”位于该列表中的某个位置。如果省略“engines”,那么 npm 将假设它在 Node.js 上工作。
您还可以使用“引擎”字段来指定哪些版本的 npm 能够正确安装您的程序。例如:
{ "engines" : { "npm" : "~1.0.20" } }
除非用户设置了 engine-strict 配置标志,否则该字段仅是建议性的,并且只会在您的软件包作为依赖项安装时产生警告。
另一种方法是使用Docker 容器作为开发和执行的运行时环境,这意味着您既不需要安装 Node,也不需要安装 NPM。例如
$ mkdir my-project $ cd my-project $ docker run --rm -it -v $PWD:/app --entrypoint /bin/bash --workdir /app node:14.15.0 root@4da6ee3c2ac0:/app# npm init -y Wrote to /app/package.json: { "name": "app", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" } root@4da6ee3c2ac0:/app# npm install npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN app@1.0.0 No description npm WARN app@1.0.0 No repository field. up to date in 1.694s found 0 vulnerabilities root@4da6ee3c2ac0:/app# exit exit $ ls -x1 package-lock.json package.json
如您所见,既没有 Node,也没有 NPM:
npm init -y
由于docker run上面的命令很长,您可能希望利用docker- compose来简化工作流程。
docker run