前端项目如何限制运行环境版本?

2,366 阅读2分钟

前言

如今,前端项目越来越负责,依赖越来越多,小伙伴一起合作才能完成项目的开发任务。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

pnpmyarn 运行脚本,会自动校验本机环境是否符合engines中配置的版本,npm 则不会 。

{
  "script": { 
    "check-env": "echo check environment successfully"
   }
}

image.png

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 命令时则会出现以下报错

image.png

完结!!🎉希望可以帮助到有需要的小伙伴