首页 > 其他分享 >如何为npm包打补丁

如何为npm包打补丁

时间:2023-01-03 13:00:13浏览次数:61  
标签:npm package 补丁 修改 如何 打补丁 patch

如何为npm包打补丁

 

我们在开发中经常遇到,npm包有点小问题或者不符合我们的场景。

通常的解决方案,是提交一个issue或者PR,等待作者修改,又或者copy源码到本地,修改依赖指向本地。

这两种方案,都有明显的缺点,不是等待时间太久,就是太过暴力。

这里推荐一个新的方案:patch-package

 

patch-package适用于对npm包简单的修改,它能在不copy源码修改依赖的前提下,将修改记录下来,利用git进行管理,保证修改在组内小伙伴间一致。

通过npm scripts集成,可以无感的使用,效果不错,成本较低。

话不多说,上demo:

0、准备

首先,当然是安装patch-package,按照文档说明来,装devDependencies就好了

yarn add patch-package --dev

1、栗子生成

这里拿lodash.clonedeep 这个包来做一下实验

找到cloneDeep函数,增加一行console.log

2、补丁生成

然后执行命令生成补丁,格式是这样滴 npx patch-package 【包名】,还有其他复杂参数,参考文档自行选用

npx patch-package lodash.clonedeep

 

如图所示,生成成功了,提示我们说,Created file patches... blabla 

查看一下目录下的patches文件夹,如下图所示,生成了lodash.clonedeep+4.5.0.patch文件

文件描述了我们修改了什么,第几行,和git的记录类似。

 

 3、补丁还原

补丁生成好了,接下来就是还原,我们首先将lodash.clonedeep包内的修改还原。

 

然后,使用 命令还原我们的修改。

 npx patch-package

执行完后,再查看文件内容,会发现我们的修改已经回来了。

 

 将代码跑起来,会发现我们的修改确实应用了。

 

4、传播与集成

至此,我们的补丁就打好了,不过好像还少了点什么。

对,缺了自动化。

我们通过npm scripts 进行自动化还原,每次构建之前,进行打补丁工作,这样我们的修改就能同步给组内其他小伙伴了。

  "scripts": {
        "serve": "npm-run-all postinstall vue-cli-service serve",
        "build": "npm-run-all postinstall vue-cli-service build"
        "postinstall": "patch-package"
    },

以上呢,是简略后的scripts,大致思路就是利用npm-run-all 执行postinstall,安装我们的补丁,然后再进行构建。

使用方法不变,只是增加了打补丁的过程。

 5、注意事项

(1)patch是锁定版本号的,如果升级了版本,patch内容将会失效,最好在package.json能够锁定版本号。

(2)魔改一时爽,但是也失去了升级的能力,提issue和PR才是正途。

(3)patch能够支持多少文件修改,没有具体测试,预感是只能支持少量修改。

标签:npm,package,补丁,修改,如何,打补丁,patch
From: https://www.cnblogs.com/sexintercourse/p/17021764.html

相关文章

  • 如何理解scanf(“%d %d”,a,b)==2和scanf(“%d”,a)=1【摘抄笔记ψ(._. )>】
    scanf函数有一个返回值,0表示接受输入失败,1表示接受输入成功。while(scanf("%d",&x)==1)的意思就是:当接收输入变量x的值成功的时候,继续做循环。......
  • js插件---GoJS 如何去水印
    js插件---GoJS如何去水印 js插件---GoJS如何去水印一、总结一句话总结:把a.Kv=d[w.Jg("7eba17a4ca3b1a8346")][w.Jg("78a118b7")](d,w.um,4,4);替换为a.Kv=functio......
  • 如何在PC上下载腾讯课堂视频?
    2-2如果已经买了课程,是可以下载的,并且腾讯课堂APP里就有下载功能。主要思路:在APP上下载视频缓存回去手机连接电脑,把缓存文件传到电脑上用软件把不能播放的缓存文件转成可以......
  • 如何导出微信好友?通讯录好友保存
    现在微信已经是日常使用最多的一个APP之一,同时也是工作上与客户联系最多的APP,随着时间流逝,在微信中保存的联系人会越来越多,相应地会有很多重要的联系人在微信里,这个时候备份......
  • 99%投标人都不知道的标前如何做好投标文档的版本管理
    投标文件杂乱,多个标之间可能存在内容放错。文档的版本管理极度混乱,一旦某个内容错误,很可能影响整个招标的结果,废标、成为黑名单的招标每天都在发生,那么是否有办法或者工具解......
  • 技术分享| 如何使用Prometheus实现系统进程监控
    如何监控线上正在运营的系统?如何得知系统目前是正常还是异常?Prometheus是这么一套数据监控解决方案。它能让运维及开发人员随时掌控系统的运行状态,快速定位出现问题的位......
  • 技术分享| 如何使用Prometheus实现系统进程监控
    如何监控线上正在运营的系统?如何得知系统目前是正常还是异常?Prometheus是这么一套数据监控解决方案。它能让运维及开发人员随时掌控系统的运行状态,快速定位出现问题的位置......
  • 开发、测试、运维这三个行业该如何选择
    首先这三者均属于互联网行业,我们不能说这其中哪一个肯定是最好的。因为即使都是互联网行业但他们都各自有各自的特点。我们只能去选择更合适自己的。 在选择进......
  • 群晖NAS不明占用如何排查
    在使用群晖NAS时,常会使用SMB映射网络驱动器的方式来共享文件夹,这样操作虽然较为常用,但有个弊端,就是当某人打开一个文件编辑时,另一人打开就会提示文件在编辑中,只能以只读的方......
  • MySQL是如何运行的
    页面(UserRecords+FreeSpace)一开始FreeSpace最大,UserRecords是空的UserRecords的记录是以行格式存储的(额外信息+真实数据数据)行格式额外信息有两个重要字段(delete......