第三方包补丁方案(优雅修改node_modules)

一、背景

我们在平时开发过程中可能会遇到以下问题
● 开源npm包不能满足我们实际预期,需要个性化支持
● 开源的npm包存在一些小小的bug,需要修复
而我们只需要对源码进行小小的改动就能满足我们的需求,这个时候我们该怎么办?
在这里插入图片描述

二、以往方案分析

方案一:在项目的node_modules下找到插件的源码直接修改
优点:简单直接、快速见效
缺点:不能持久化,一旦重新安装就失效
方案二:去github上fork第三方包代码进行修改,将修改过后的代码发布到公司私服npm上使用
优点:可持久化,项目成员都可以使用到这份修改的代码
缺点:无法追溯修改历史,无法形成git记录
方案三:去github上fork第三方包代码进行修改,将我们贡献的内容提交给开源作者
优点:让项目/软件变得更完善,便于社区所有人适用
缺点:不适用于特定需求,且时间战线较长

三、推荐方案patch-package

1.安装patch-package

npm i patch-package --save-dev  // npm 安装

2.根据需求,修改npm包
在这里插入图片描述

3.生成补丁文件

npx patch-package package-name  //运行命令该命令, package-name为你修改的npm包名。

如:npx patch-package vux

执行完成,会看到根目录多了一个patches文件夹,里面包含了所修改的npm包的patch文件, 如 vux+2.9.2.patch
文件名中的2.9.2是依赖包的版本号,表示这个补丁只对2.9.2版本的该npm插件生效
在这里插入图片描述

可以看到vux+2.9.2.patch 中记录着修改内容。
在这里插入图片描述

4.修改package.json文件,设置postinstall钩子

"scripts": {
    "dev": "node build/dev-server.js",
    "build:dev": "node --max_old_space_size=4096 build/dev-deploy.js",
    "build:test": "node --max_old_space_size=4096 build/test.js",
    "build:uat": "node --max_old_space_size=4096 build/uat.js",
    "build:prod": "node --max_old_space_size=4096 build/build.js",
    "unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run",
    "lint": "eslint --fix --ext .js,.vue src",
  + "postinstall": "patch-package"
 },

● postinstall:每次npm install 安装完依赖后,将会执行此条脚本命令
在这里插入图片描述

5.解决流水线postinstall不能执行问题
云效流水线执行postinstall 会报cannot run in wd 错误。
解决方案:在根目录添加一个 .npmrc 文件,增加 unsafe-perm = true ,注入环境变量
在这里插入图片描述

6.测试
删除node_module并重新安装项目依赖,依赖包安装完成后可以打开node_modules中查看对应文件是否有相关修改变动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值