前言
通过配置 package.json 里面的 engines 来限制 node 版本,通过测试发现只对 yarn 有效果,对npm是没有限制效果的,网上说的将 engine-strict=true 放在 .npmrc 文件中的方法在 npm 3.0.0 中已经不支持了,所以我这里是通过自定义方法来进行 node 版本控制。(支持 npm 和 yarn)
其他规范可参考以下:
步骤
-
配置
package.json文件{ "name": "my package", "scripts": { "check-version": "babel-node check-version.mjs", "postinstall": "npm run check-version" }, // 需要安装的依赖 "dependencies": { "@babel/node": "^7.22.6", "semver": "^7.5.3", }, "engines": { "node": ">=16.0.0 <17.0.0" // 按照自己的需求写 } } -
在项目的根目录下创建check-version.mjs
// check-version.mjs文件内容 import semver from 'semver'; import fs from 'fs'; const packageJson = fs.readFileSync('./package.json', 'utf8'); const packageObj = JSON.parse(packageJson); const version = packageObj.engines.node; console.log('项目规定 node 版本:' + version); console.log('当前本地 node 版本:' + process.version); if (!semver.satisfies(process.version, version)) { console.log(`node 版本校验不通过,所需的 node 版本 ${version} 不匹配当前版本 ${process.version}.`); process.exit(1); } else { console.log('node 版本校验通过'); } -
在终端进行验证
npm run check-version -
完成,此后通过
npm install时,不符合版本的安装将会被拦截。