小编典典

有什么方法可以修复 package-lock.json lockfileVersion 以便 npm 使用特定格式?

all

如果两个不同的开发人员在最初使用 a 创建的项目中使用不同版本的 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,但是 package-lock.json
是为 lockfileVersion@2 生成的。我会尽力做到最好的!

有什么方法可以指定仅使用的npm 版本"lockfileVersion": 1?还是我们只需要让所有开发人员都使用相同版本的npm?


阅读 323

收藏
2022-07-28

共1个答案

小编典典

有什么方法可以指定npm仅使用的较新版本"lockfileVersion": 1?还是我们只需要让所有开发人员都使用相同版本的npm?

我会建议你固定 Node/NPM 版本,并在你的环境(开发、登台和生产)中调整它。

您可以nvm通过添加到项目.nvmrc文件中来管理节点版本(不要忘记将其存储在源代码管理中)。

例如,.nvmrc看起来像:

$ cat .nvmrc
14.15.0

然后,您可以使用nvm install && nvm use固定版本的 Node.js。

NPM 还支持engines

您可以指定您的东西适用的节点版本:

{ "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:

  1. 为新项目创建了一个新目录
  2. 启动一个 Node Docker 容器,它带有 Node 和 NPM
  3. 创建了一个新项目 ( npm init -y)
  4. 退出 Docker 容器
  5. 列出了容器被旋转的工作目录中的文件

由于docker run上面的命令很长,您可能希望利用docker-
compose
来简化工作流程。

2022-07-28