一、背景
平时在用npm包时,多少会遇到有些npm包不符合预期,或者包本身功能缺陷等问题,然后一查就是要改npm包源码,而且有的时候靠升级最新的包也没有解决问题。因此就有了patch-package的用武之地。
二、原理
他的原理就是记录你改包的内容,然后在每次install安装npm包之后执行patch-package将你改的内容覆盖掉npm包。
三、使用方法
1、安装patch-package包
npm i patch-package --save-dev
2、修改出问题的包的源码(这里以“pdf.js 包不显示pdf电子签章的问题“为例)
(1)首先要固定包的版本,不能让包自动升级,以免执行patch-package时候出问题,像下图这样去掉版本左边的角标。
(2)找到出问题的npm包的代码并修改,如下图框内的代码(这里是将框内代码删掉就行)
(3)在本地运行代码,结果符合修改预期后,执行如下命令,patch-package会生成patches文件夹自动记录修改的内容生成一个diff文件,打开里面就是记录了你修改的内容:
npx patch-package pdfjs-dist
(4)最后需要在每次install下载完包后都去执行patch-package命令,将下载的包内容修改掉,只需要在package.json里的scripts中添加如下内容即可:
"postinstall": "patch-package"
(5)最后只要把代码提交到仓库,之后同事拉取代码后,只要每次install都会更新包内容,从而达到预期的效果
总结
patch-package确实给我们带来了极大的便利,因为平时使用的npm包也都是程序员们写的,总会有这个那个问题,或者没有达到预期效果,需要改源码的场景,下一篇文章我们就聊一下我遇到的需要用patch-package修改npm包的一些问题。