vlambda博客
学习文章列表

【第2325期】使用patch-package修改Node.js依赖包内容

前言

本周才知道有这么个库。今日前端早读课文章由@Ghosind授权分享。

正文从这开始~~

公司项目中使用了kue-scheduler包,但是在使用中发现了该包中的一个。在debug的过程中直接修复了该漏洞,并向该项目提了PR,作者也很快做出了反应。因为该项目疑似已不再维护,代码被合并后作者也未发布新版本。因为后续功能的开发受该bug的影响,只能采用修改内容补丁的方式修复bug。

本文中创建补丁的方式为使用了patch-,可能还有更多类似的工具可以使用,有兴趣的朋友可以自己探索。

安装patch-package

patch-package包可以通过进行安装。

 
   
   
 
  1. npm i patch-package--save-dev

或者也可以通过yarn进行安装。

 
   
   
 
  1. yarn add --dev patch-package postinstall-postinstall

创建补丁

在修改依赖包内容后,就可以运行patch-package创建patch文件了。

 
   
   
 
  1. $ npx patch-packagepackage-name # 使用npm

  2. $ yarn patch-packagepackage-name # 使用yarn

运行后通常会在项目根目录下的patches目录中创建一个名为package-name+version.patch的文件。将该patch文件提交至版本控制中,即可在之后应用该补丁了。

部署

完成上述操作后,最后还需要修改package.json的内容,在scripts中加入"postinstall": "patch-package"。

 
   
   
 
  1. "scripts": {

  2. "postinstall": "patch-package"

  3. }

至此,在后续运行npm install或是yarn install命令时,便会自动为依赖包打上我们编写的补丁了。

最后,这个库的官网还有一段很详细的对比,描述了什么时候用patch什么时候fork,描述的非常到位:

修补分叉的好处

  • 有时候分支需要额外的构建步骤,例如对 Android 使用 react-native。

  • 当依赖项发生变化时,用红色大写字母告诉您,您需要检查修复是否仍然有效。

  • 让您的补丁与依赖它们的代码共存。

  • 补丁可以作为正常的审查过程的一部分进行审查,但fork可能不能

什么时候用fork代替

  • 这种变化太重要了,不能在原地开发。

  • 这种改变对其他人来说也是有益的。

  • 你有能力向上游做一个适当的PR。

patch-package:https://www.npmjs.com/package/patch-package

为你推荐






欢迎自荐投稿,前端早读课等你来。