在一个项目中,随着时间的推移,node版本在不断更新,但一些依赖库你并不知道它支不支持在新的node版本中运行。为了稳定,通常我们需要在开始时就选定一个兼容性强的node LTS版本,并且在项目中锁定版本。这也是防止后续的开发发生一些由环境引起的问题。
通过nvm来管理版本
如果项目中使用了nvm来进行版本控制,需要在根目录创建一个.nvmrc文件来指定node版本,内容如下:
.nvmrc
v14.19.1
通过package.json中的属性来限制
我们可以通过在package.json
中设置engines
属性来指定版本范围。npm-package文档
指定node版本的范围
{
"engines": {
"node": ">=14.19.1 <=17.9.0"
}
}
固定为指定版本
{
"engines": {
"node": "~14.19.1"
}
}
.npmrc
前面我们说了在package.json中指定engines
属性来限制node版本,这个在yarn
和pnpm
中时有效的。
在配置了engines
后,再使用nvm将node版本变为v12.18.3之后再使用yarn
来安装依赖,就会报错
pnpm i
也是相似的报错
但是使用npm i
并不会按照engines
的属性来报错,这是因为在npm中设置了engine-strict默认为false。因此,我们需要创建.npmrc
来显式的定义为true,如下
.npmrc
engine-strict=true
这样当node未满足版本要求时,就无法运行npm install
了