有没有办法指定更新版本的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:
- 为新项目创建了一个新目录
- 旋转了一个 node Docker容器,它与Node和NPM一起提供
- 创建了一个新项目(
npm init -y
)
- 退出Docker容器
- 列出了容器所在的工作目录中的文件
由于上面的docker run
命令很长,您可能希望利用docker-compose来实现更精简的工作流.