有没有办法指定较新版本的npm 只使用"lockfileVersion": 1?还是我们只需要让所有开发人员都使用同一版本的npm?
我会建议您固定 Node/NPM 版本并将其与您的环境(开发、登台和生产)保持一致。
您可以通过将.nvmrc 文件添加到项目中来利用nvm 管理节点版本(不要忘记将其存储在您的源代码管理中)。
例如,.nvmrc 看起来像:
$ cat .nvmrc
14.15.0
那么,您可以使用nvm install && nvm use 来使用固定版本的Node。
NPM 也支持engines:
你可以指定你的东西工作的节点版本:
{ "engines" : { "node" : ">=0.10.3 <0.12" } }
并且,与依赖项一样,如果您不指定版本(或者如果您指定“*”作为版本),那么任何版本的 Node 都可以。
如果您指定“引擎”字段,则 npm 将要求“节点”位于该列表中的某个位置。如果省略了“engines”,那么 npm 将假设它在 Node 上工作。
您还可以使用“引擎”字段来指定哪些版本的 npm 能够正确安装您的程序。例如:
{ "engines" : { "npm" : "~1.0.20" } }
除非用户设置了 engine-strict 配置标志,否则该字段仅是建议性的,并且只会在您的包作为依赖项安装时产生警告。
另一种方法是使用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:
- 为新项目创建了一个新目录
- 启动一个 Node Docker 容器,它带有 Node 和 NPM
- 创建了一个新项目 (
npm init -y)
- 退出 Docker 容器
- 列出了容器被旋转的工作目录中的文件
由于上面的docker run 命令很长,您可能希望利用docker-compose 来简化工作流程。