在一个项目中,随着时间的推移,一些依赖库可能只能工作于当时安装时所采用的 node 版本。这时再使用新版本 node 时就无法保证项目在一个稳定的环境中运行,甚至是无法运行。为了稳定,通常我们需要在开始时就选定一个兼容性强的 node LTS 版本,并且在项目中锁定版本。
.nvmrc
如果项目中使用了 nvm 来进行版本控制,需要在根目录创建一个[.nvmrc](https://github.com/nvm-sh/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.8.3 之后再使用yarn
来安装依赖,就会报错
pnpm i
也是相似的报错
但是使用npm i
并不会按照engines
的属性来报错,这是因为在 npm 中设置了engine-strict默认为 false。因此,我们需要创建.npmrc
来显式的定义为 true,如下
.npmrc
engine-strict=true
这样当 node 未满足版本要求时,就无法运行npm install
了