前言
如今,前端项目越来越负责,依赖越来越多,小伙伴一起合作才能完成项目的开发任务。node
版本过高、过低或者包管理器不一致,项目中好几个.lock
文件,你有没有遇到过?这些问题可能最终会导致项目无法运行或者无法打包,通常遇到这一类问题,没有足够的经验,是很难发现问题的。所以在项目中限制安全运行环境版本,是一个很好的规避方式。本文以pnpm
为例,讲述如何限制项目环境版本
配置engines
根据 npm-package 文档的描述,可以在 package.json
中通过 engines
属性指定 Node.js 的版本。更多的版本配置规则,请参考semver
{
"engines": {
"node": ">=14.0.0",
"pnpm": ">=7.0.0"
}
}
在项目根目录新建.npmrc
文件,添加以下内容,启用严格模式。这样在版本不符合规定时,就会报错,而不是警告
engine-strict = true
这样,在执行 <npm | yarn | pnpm> install
安装项目依赖时,node
必须大于等于14.0.0
并且pnpm
大于等于7.0.0
版本才可以正确的安装。
如何主动检查环境
pnpm
和 yarn
pnpm
或yarn
运行脚本,会自动校验本机环境是否符合engines
中配置的版本,npm 则不会 。
{
"script": {
"check-env": "echo check environment successfully"
}
}
npm
推荐使用pnpm
或者 yarn
来安装依赖,如果必须使用npm
。我们还可以使用npm hooks
来自己实现版本的校验
npm i semver
semver 是一个语义版本检查器
const semver = require('semver')
const { engines } = require('./package')
const version = engines.node
if (!semver.satisfies(process.version, version)) {
console.log(
[
'\033[41;30m UNEXPECTED node version \033[41;32m\033[0m',
'Your Node version is incompatible with ' + process.mainModule.path + '.',
'Expected version: ' + version,
'Got: ' + process.version
].join('\n')
)
process.exit(1)
}else{
console.log(`echo check environment successfully`)
}
{
"scripts": {
"check-env": "node ./checkver.js"
}
}
再次执行npm run check-env
就会看到提示
补充: 限定包管理器
{
"srcipt":{
"preinstall":"npx only-allow pnpm"
}
}
此时,只能使用
pnpm install
安装依赖,非pnpm
在运行install
命令时则会出现以下报错
完结!!🎉希望可以帮助到有需要的小伙伴