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

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

npm WARN read shrinkwrap此版本的npm与兼容lockfileVersion@1,但是包锁.json是为lockfileVersion@2.我会尽力的!

有没有办法指定更新版本的npmonly使用"lockfileVersion": 1?还是我们只需要让所有开发人员都使用同一版本的npm

推荐答案

有没有办法指定更新版本的npm只使用"lockfileVersion": 1?还是我们只需要让所有开发人员都使用同一版本的npm

我将建议您固定 node /NPM版本,并在您的环境(开发、登台和生产)中调整它.

您可以通过向project .nvmrc文件中添加nvm来管理 node 版本(不要忘记将其存储在源代码管理中).

例如,.nvmrc将看起来像:

$ cat .nvmrc
14.15.0

然后,可以使用nvm install && nvm use来使用 node 的pined版本.

NPM还支持engines:

您可以指定您的资料使用的 node 的版本:

{ "engines" : { "node" : ">=0.10.3 <0.12" } }

而且,与依赖项一样,如果不指定版本(或者指定"*"作为版本),那么任何版本的 node 都可以.

如果指定"引擎"字段,npm将要求" node "位于该列表的某个位置.如果省略了"引擎",那么npm只会假设它在 node 上工作.

您还可以使用"引擎"字段指定哪些版本的npm能够正确安装您的程序.例如:

{ "engines" : { "npm" : "~1.0.20" } }

除非用户设置了engine strict config标志,否则此字段仅为建议字段,仅在作为依赖项安装软件包时才会产生警告.

另一种方法是使用Docker container作为开发和执行的运行时环境,这意味着您既不需要安装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:

  1. 为新项目创建了一个新目录
  2. 旋转了一个 node Docker容器,它与Node和NPM一起提供
  3. 创建了一个新项目(npm init -y)
  4. 退出Docker容器
  5. 列出了容器所在的工作目录中的文件

由于上面的docker run命令很长,您可能希望利用docker-compose来实现更精简的工作流.

Node.js相关问答推荐

无法验证叶签名|无法验证第一个证书

node 无法验证第一个证书

如何在Node js中从MongoDB获取特定数据,使用GET方法?

为什么我收到此错误:MissingSchemaError:架构尚未为模型&业务&注册

如何在Mongoose for MongoDB中编写此查询

在对象的嵌套数组中使用$lookup,创建多个记录作为响应,mongodb

Sequelize、postgres和posgis:在n°;公里

为什么我不能将 id 发送到后端并通过 findByIdAndRemove() 删除项目?

错误 node :错误:绑定消息提供 16 个参数,但准备语句需要 15 个

TypeError:在使用 Jest、Supertest、Express、Typescript 进行测试时无法读取未定义的属性(读取listen)

如何使用 NodeJS 加密模块将 ECDH 密钥转换为 PEM 格式

在 nodejs 中使用 multer 上传文件返回未定义的 req.file 和空的 req.body

Firestore promise 在退货前等待产品详细信息

node.js 中 pdfkit-tables 中的垂直线

Puppeteer 错误:未下载 Chromium 修订版

在 Node.js 中的两个不同进程之间进行通信

如何在 node 中转义 shell 命令的字符串?

安装 node 包时可以使用自定义目录名称而不是node_modules吗?

NPM:为什么要安装这个包?

从 node.js 连接到 mongodb 时出现 ECONNREFUSED 错误