如果两个不同的开发人员使用不同版本的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.js服务器时出错:MODULE_NOT_FOUND

查询嵌套数组中的最后一个元素具有特定值的mongoDB集合中的文档

如何在.npmrc中添加 comments ?

FindOne()返回所有值,而不是一个值

用于SLACK命令返回json而不是文本的AWS lambda函数

如何从谷歌云中部署的应用程序连接到mongoDB Atlas?

无法将示例 Node.js 应用程序部署到 AWS Elastic Beanstalk

合并Shift对象数组以创建最终的排班表

具有项目外部子路径导入的 Firebase 函数

如何使用 node.js 将两个或多个 API 请求组合成一个端点并表达

使用 NPM 三个 mocha+typescript 进行测试

访问 Mongoose 查询之外的变量

更新文档数组中的文档 Mongoose

ESLint:TypeError:this.libOptions.parse 不是函数

baseurl64 缓冲区解码

如何在 MongoDB 上只收听 localhost

Bootstrap 中的 Grunt 依赖冲突

Selenium WebDriver 等到元素显示

使用 Node-sass 缩小 CSS

用于轻松部署和更新的 Node.js 设置