侧边栏壁纸
博主头像
MicroMatrix博主等级

曲则全,枉则直,洼则盈,敝则新,少则得,多则惑。是以圣人抱一为天下式。不自见,故明;不自是,故彰;不自伐,故有功;不自矜,故长。夫唯不争,故天下莫能与之争。古之所谓“曲则全”者,岂虚言哉!诚全而归之。

  • 累计撰写 80 篇文章
  • 累计创建 21 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

前端项目限制环境版本

蜗牛
2023-12-12 / 0 评论 / 0 点赞 / 18 阅读 / 4159 字 / 正在检测是否收录...

前言

在如今这个前端项目框架较为成熟的年代,一个前端项目涉及到多个依赖,而这个项目的依赖又是居于项目的版本来的。所以一个大型的项目,多人进行联合开发的时侯,A说项目启动不起来了,B说安装包依赖出现一长串错误。C水打包出现报错了。一开始遇到这种问题,没有经验的话很难发现问题的所在。所以在项目中限制安全运行环境版本,是一个很好的规避方式。本文以pnpm,yarn和npm这3种常见的包管理器做例子说明。

配置engines

npm-package的文档中有提到如何指定Node.js版本。通过在package.json中通过engines的字段来指定版本。

"engines": {
	"node": ">=16.16.0",
	"pnpm": ">=7.26.3"
}

然后再在项目的根目录新建.npmrc 文件,添加如下内容,启动严格模式。这样就会在版本不符合的时候提示版本问题。

engine-strict = true

这样在执行[npm|yarn|pnpm] install 安装项目依赖的时候,会检查node版本是否大于16.16.0并且pnpm大于等于7.26.3版本才能正确安装。

自动检测版本

上面的是手动进行检测版本,那么我们都希望像npm run dev 这样自动检测版本。那么就需要在package.json中加入指令

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

之后可以运行pnpm run check-envyarn run check-env ,这里没有写npm的情况,主要是这个对于npm没有作用。

npm自动检测版本

npm检测版本需要搭配semver的插件写一个脚本来实现。

npm i semver

semver是一个语义版本检测器

const semver = require('semver')
const { engines } = require('./package')// 这里的package是你的package.json文件路径
const version = engines.node

if (!semver.satisfies(process.version, version)) {
  console.log(
    [
      'node环境变量版本错误',
      '你的node环境启动位置' + process.mainModule.path + '.',
      '要求环境版本' + version,
      '你的环境版本' + process.version
    ].join('\n')
  )
  process.exit(1)
}else{
  console.log(`echo check environment successfully`)
}
{
  "scripts": {
    "check-env": "node srcipts/checkver.js" // 脚本相对于根目录的位置
  }
}

再次运行npm run check-env 就能看到提示了

限定包管理器

{
  "srcipt":{
    "preinstall":"npx only-allow pnpm"
  }
}

此时如果用非pnpm的包管理器就会提示错误

0

评论区