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

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

作者头像
前端小鑫同学
发布于 2022-12-26 01:43:51
发布于 2022-12-26 01:43:51
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

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
代码运行次数:0
运行
AI代码解释
复制
npm/6.14.5 node/v14.17.1 win32 x64
yarn/1.22.10 npm/? node/v14.17.1 win32 x64
2. 完整脚本:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
{
  "scripts": {
    "preinstall": "node ./preinstall.js"
  }
}

二、ExecPath方案

  1. 通过npm_execpath来获取当前执行的包管理器绝对路径
  2. 通过正则匹配路径中的名称来限制非允许的包管理器执行安装1. npm_execpath: 同开源项目方案:vue-next,scripts\preinstall.js
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
{
  "scripts": {
    "preinstall": "node ./preinstall.js"
  }
}

三、only-allow方案

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从 vue3 和 vite 源码中,我学到了一行代码统一规范团队包管理器的神器
我们项目开发时,常需要安装依赖,虽说一般用文档可以说明。但不是比较强制的约束。是人就容易犯错或者疏忽,假如规定是用的npm,而团队里有人某一天不小心使用了其他包管理器安装了的其他依赖,上传了代码,严重时可能导致线上问题。所以我们需要借助工具(代码)来强制约束。
若川
2021/12/01
1.3K0
从 vue3 和 vite 源码中,我学到了一行代码统一规范团队包管理器的神器
yarn -- 新型包管理器
随着nodejs的出现,另外两个东西也进入了前端大众的视野–CommonJS规范、node 包管理器。
用户1394570
2018/08/08
6530
NPM - Node Package Manager - Node 包管理器
NPM - Node Package Manager - Node 包管理器 NPM 是什么? npm(全称Node Package Manager,即node包管理器)是Node.js默认的、以JavaScript编写的软件包管理系统。 npm 官方网站 npm 官方文档 一般当我们说npm的时候可能指3件事 NPM 网站:https://www.npmjs.com/ NPM 包管理库,存储了大量的JavaScript代码库 NPM 客户端,我们所使用的npm命令行工具。使用JavaScript开发的基于
eadela
2020/02/12
1.2K0
JavaScript 包管理器
npm、yarn、pnpm 都是现代化的 JavaScript 包管理器,它们的异同如下:
yiyun
2023/05/18
1.1K0
JavaScript 包管理器
Node.js 包管理器 NPM 讲解
包管理器又称软件包管理系统,它是在电脑中自动安装、配制、卸载和升级软件包的工具组合,在各种系统软件和应用软件的安装管理中均有广泛应用。对于我们业务开发也很受益,相同的东西不必重复去造轮子。
五月君
2019/08/13
1.5K0
lerna 包管理器
Lerna 是一种工具,针对 使用 git 和 npm 管理多软件包代码仓库的工作流程进行优化。 多包管理器 安装 npm i lerna -g 命令 init 项目初始化 lerna init // 默认初始化 lerna init --independent // 使用独立版本模式 lerna init --exact init 生成目录 packages/ // 默认包目录 package.json lerna.json // lerna 配置 bootstrap 为所有包安装依赖
copy_left
2020/10/27
1.5K0
尤雨溪推荐神器 ni ,能替代 npm/yarn/pnpm ?简单好用!源码揭秘!
想学源码,极力推荐之前我写的《学习源码整体架构系列》 包含jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4、koa-compose、vue-next-release、vue-this、create-vue等十余篇源码文章。
若川
2021/11/10
2.3K3
你真的知道 NPM、Yarn 与 PNPM 这三个前端包管理器之间的区别吗?
在当代的Web开发过程中,JavaScript项目的构建离不开各种外部依赖,无论是实用的库、辅助工具还是其他类型的资源。这些依赖项的管理,已经成为了开发者日常不可或缺的一部分。NPM、Yarn和PNPM这三个包管理器,就像是开发者的得力助手,它们在项目开发中扮演着至关重要的角色。本文将带你一探究竟,了解这些工具的魅力所在,并帮助你选择适合自己项目的包管理器。
前端达人
2024/04/12
4.8K0
你真的知道 NPM、Yarn 与 PNPM 这三个前端包管理器之间的区别吗?
Vue 3.2 发布了,那尤雨溪是怎么发布 Vue.js 的?
之前写的《学习源码整体架构系列》 包含jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4十篇源码文章。
若川
2021/09/07
1.5K0
Node.js包管理器Yarn的入门介绍与安装
FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在前不久, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm 。咱虽然是个半桶水的咸鱼前端,不过也得跟上 Javascript 这股潮 (hong) 流 (huang) 的脚步,所以便有了下面这篇文章。大概的浅尝了一下这个自称是又快又可信赖又安全的包管理,所以写的内容不会很详细,更多的可能只是针对这个全新的包管理与 npm 的不同之处来对比。也可能有些地方写得不对,如果有的
用户1174387
2018/01/17
1.7K0
Node.js包管理器Yarn的入门介绍与安装
包管理工具
前端的包管理工具相信大家一定不会陌生,因为每天都需要跟他打交道,新项目或者刚拉下来的前端项目都需要去 install 依赖进行包的依赖安装,大家最熟悉的应该就是 npm 了,或者国内的 npm 镜像包 cnpm ,大家熟称为淘宝镜像
离殊
2022/04/01
2.8K0
包管理工具
Vue团队核心成员开发的39行小工具 install-pkg 安装包,值得一学!
本文仓库 https://github.com/lxchuan12/install-pkg-analysis.git,求个star^_^[1]
若川
2021/12/13
8280
硅谷甄选运营平台
此次教学课程为硅谷甄选运营平台项目,包含运营平台项目模板从0到1开发,以及数据大屏幕、权限等业务。
小城故事
2024/08/24
1760
关于现代包管理器的深度思考——为什么现在我更推荐 pnpm 而不是 npm/yarn?
很长时间没有更新原创文章了,但是还一直在思考和沉淀当中,后面公众号会更频繁地输出一些前端工程相关的干货,希望对大家有一些启发,也希望在实际的工作当中帮助大家提升效率。
用户3806669
2021/03/10
3.2K0
VueCLI3如何更改安装时的包管理器为yarn或npm
在执行 vue create project 后如果显示如下 npm run serve 则表示你使用的是npm创建的项目。
smy
2018/12/24
1.9K0
NuGet程序包管理器
 开发过程中几乎不可避免地要使用第三方包,当然可以不用包管理器。对于开源的项目可以直接引用源文件,预先构建好了的库也可以直接引用dll。但是用nuget之类的包管理器可以更方便地进行管理,比如最基本的安装、更新、卸载功能可以直接通过命令行或者IDE来操作。
鱼找水需要时间
2024/03/18
1860
NuGet程序包管理器
使用腾讯云提供的针对Nuget包管理器的缓存加速服务
继阿里巴巴开源镜像站(https://opsx.alibaba.com/)、华为云镜像站点(https://mirrors.huaweicloud.com/ )之后,腾讯也已于近日上线了类似的服务,官方名称为腾讯云软件源(Tencent Open Source Mirror Site),为国内开发者提供新的软件镜像源选择[https://mp.weixin.qq.com/s/T43MZSDiN04EdgirBif1GQ]。与国内其他同类服务相似,此开源镜像站提供了主流的Linux发行版安装镜像下载以及软件源镜像,还有几大语言程序包的仓库服务,比如Node.js的npm仓库和Python的pip仓库以及dotnet的nuget 仓库。Nuget 镜像地址是(https://mirrors.cloud.tencent.com/nuget/)。
张善友
2019/07/29
3.9K0
使用腾讯云提供的针对Nuget包管理器的缓存加速服务
记录一次切换包管理器引发的血案
我们现在的项目统一用 yarn 进行包管理,之前有一个旧项目之前使用的是 npm 进行管理。于是我决定切换一下。
GopalFeng
2022/08/01
4940
记录一次切换包管理器引发的血案
前端包管理工具与配置项
任何一个项目的构建离不开工具和统一的管理标准,在项目开发和维护过程中,我们需要了解安装包的相应工具和配置文件,以此来有效的进行项目的迭代和版本的更新,为项目提供基本的运行环境。
程序员海军
2023/11/07
5700
最高性能的包管理器-pnpm
每一个文件都有一个唯一的 inode,它包含文件的元信息,在访问文件时,对应的元信息会被 copy 到内存去实现文件的访问。
GopalFeng
2022/08/01
1.7K0
最高性能的包管理器-pnpm
相关推荐
从 vue3 和 vite 源码中,我学到了一行代码统一规范团队包管理器的神器
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验