共计 字 • 阅读约
min
前言
如今,前端项目越来越负责,依赖越来越多,小伙伴一起合作才能完成项目的开发任务。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
命令时则会出现以下报错
完结!!🎉 希望可以帮助到有需要的小伙伴
文章更新于: 2022-6-7 14:59:40