口头约定的node版本并不能保证所有人在所有时间都能遵守规则,但用代码控制不一样,像一个毫无情分可言的杀手,发现可乘之机立即结束进程,干净利落(有点中二)。
使用Semver
跟目录下创建checkversion.js
const semver = require('semver');
const { engines } = require('./package');
const version = engines.node;
if (!semver.satisfies(process.version, version)) {
console.error(`Required node version ${version}, got: ${process.version}.`);
process.exit(1);
}
在package.json
跟节点下的engines
定义版本号
{
//...
"engines": {
"node": "~12.13.0"
},
//...
}
~ 表示不改变大版本号和次要版本号
^ 表示不改变大版本号
由于semver需要在安装后运行,因此在package.json
scripts
下的postinstall
(不应在preinstall
hook下)添加
{
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"postinstall": "node ./checkver.js"
},
}
完成后执行node install 当系统node version与指定环境不一致时会结束进程并给予提示。