前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【规范】统一项目中包管理器的使用

【规范】统一项目中包管理器的使用

作者头像
前端小鑫同学
发布2022-12-26 09:43:51
1.3K0
发布2022-12-26 09:43:51
举报
文章被收录于专栏:小鑫同学编程历险记

Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~

【规范】统一项目中包管理器的使用

背景介绍:

我们这里暂不说各种包管理器的优缺点,在实际开发中遇到的一个问题就是,你本地经常使用cnpm来安装,但Jenkins自动构建用的npm,偶尔就会出现本地开发很正常但是Jenkins构建失败报警了,为了避免类似问题的出现,也应该要将能统一的都统一规范。

实现原理:

  1. 通过preinstall来在执行install前执行指定脚本;
  2. 在preinstall脚本中获取当前执行进程中包管理器的唯一属性;
  3. 确定执行的和预设的是否一致,拦截或者放行。 一、UserAgent方案
  4. 通过npm_config_user_agent来获取当前执行的是包管理器的名称和版本
  5. 通过对比名称来限制非允许的包管理器执行安装 1. npm_config_user_agent: 同开源项目方案:which-pm-runs
代码语言:javascript
复制
npm/6.14.5 node/v14.17.1 win32 x64
yarn/1.22.10 npm/? node/v14.17.1 win32 x64
2. 完整脚本:
代码语言:javascript
复制
const allowPM = 'yarn'
const userAgent = process.env.npm_config_user_agent || ''
if (userAgent !== '') {
  const pmName = userAgent.substring(0, userAgent.indexOf('/'))
  if (pmName !== allowPM) {
    console.warn(
      `\u001b[33m This repository requires using ${allowPM} as the package manager for scripts to work properly.\u001b[39m\n`
    )
    process.exit(1)
  }
}
代码语言:javascript
复制
{
  "scripts": {
    "preinstall": "node ./preinstall.js"
  }
}
image.png
image.png

二、ExecPath方案

  1. 通过npm_execpath来获取当前执行的包管理器绝对路径
  2. 通过正则匹配路径中的名称来限制非允许的包管理器执行安装1. npm_execpath: 同开源项目方案:vue-next,scripts\preinstall.js
代码语言:javascript
复制
C:\Users\OSpoon\AppData\Roaming\nvm\v14.17.1\node_modules\npm\bin\npm-cli.js
C:\Users\OSpoon\AppData\Roaming\npm\node_modules\yarn\bin\yarn.js
2. 完整脚本:
代码语言:javascript
复制
const allowPM = 'yarn'
const execpath = process.env.npm_execpath || ''
if (!new RegExp(`${allowPM}`).test(execpath)) {
  console.warn(
    `\u001b[33m This repository requires using ${allowPM} as the package manager for scripts to work properly.\u001b[39m\n`
  )
  process.exit(1)
}
代码语言:javascript
复制
{
  "scripts": {
    "preinstall": "node ./preinstall.js"
  }
}
image.png
image.png

三、only-allow方案

only-allow为pnpm包管理器组织开源限制方案,only-allow内部使用which-pm-runs来获取当前执行的包管理器后再进行判断拦截,仅需在安装依赖后调整scripts中的内容即可,在vite项目中有使用。

代码语言:javascript
复制
{
  "scripts": {
    "preinstall": "npx only-allow yarn"
  }
}
image.png
image.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【规范】统一项目中包管理器的使用
    • 背景介绍:
      • 实现原理:
        • 2. 完整脚本:
      • 二、ExecPath方案
        • 2. 完整脚本:
      • 三、only-allow方案
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档