當我們使用 npm 上的第三方依賴包,如果發(fā)現(xiàn) bug 時,怎么辦呢?
想想我們在使用第三方依賴包時如果遇到了bug,通常解決的方式都是繞過這個問題,使用其他方式解決,較為麻煩。或者給作者提個issue,然后等待作者的修復(fù),等待的時間不可控。那么這時候是不是就可以借助patch-package自己動手去修復(fù)該bug,感覺是不是很棒,并且還可以在第三方依賴包上,根據(jù)業(yè)務(wù)需求擴展能力。
當然最好還是擴展一些通用性比較高的能力,如果是比較通用且該能力大多數(shù)開發(fā)者都有這種訴求的話可以給第三方依賴包提個PR。參與開源項目是不是簡單了起來了~(不要在魔改的路上越走越遠)
挺多文章有介紹的,可以參考:
1、vue-pdf問題解決及patch-package簡介:https://www.jianshu.com/p/d1887e02f8d6
2、使用“黑魔法”優(yōu)雅的修改第三方依賴包:https://zhuanlan.zhihu.com/p/412753695
3、使用patch-package定制node_modules中的依賴包:https://blog.csdn.net/qq_32429257/article/details/111051217
具體應(yīng)用場景就不多說了,可以自己看文章,其實還是有蠻多需求的,這里主要記錄一下具體使用步驟。
patch-package的使用
Step1:安裝
使用npm安裝
npm i patch-package
推薦使用yarn安裝
yarn add patch-package postinstall-postinstall
Step2:修改package.json文件
package.json的scripts中聲明了一系列的npm腳本命令,如下:(參考資料:http://caibaojian.com/npm/misc/scripts.html)
- prepublish: 在包發(fā)布之前運行,也會在npm install安裝到本地時運行
- publish,postpublish: 包被發(fā)布之后運行
- preinstall: 包被安裝前運行
- install,postinstall: 包被安裝后運行
- preuninstall,uninstall: 包被卸載前運行
- postuninstall: 包被卸載后運行
- preversion: bump包版本前運行
- postversion: bump包版本后運行
- pretest,test,posttest: 通過npm test命令運行
- prestop,stop,poststop: 通過npm stop命令運行
- prestart,start,poststart: 通過npm start命令運行
- prerestart,restart,postrestart: 通過npm restart運行
可以看到依賴包在安裝完之后會執(zhí)行postinstall命令
所以我們在package.json的scripts里面增加:"postinstall": "patch-package"
"scripts": {
***,
+ "postinstall": "patch-package"
}
修改 package.json,新增命令 "postinstall": "patch-package",如圖:
Step3.執(zhí)行命令 npx patch-package 修改的文件夾名字 此處文件夾名字指 node_modules 中下的文件夾名。
比如如:npx patch-package pdfjs-dist 這里的 pdfjs-dist 就是我們修改的文件的主文件夾名。
Step4.生成補丁 命令執(zhí)行結(jié)束后查看根目錄下是否生成了 patches 文件夾,patches文件夾是自動生成的,如圖:
Step5.npm install 驗證 在項目里 npm install 驗證,是否有補丁包的提示,有就表示打補丁成功!
注意事項1:
1、自動部署中不生效
報錯信息
npm WARN lifecycle nuxt-base-pc@1.0.0~postinstall: cannot run in wd nuxt-base-pc@1.0.0 patch-package (wd=/data/servers/jenkins/workspace/nginx)
解決辦法
在項目根目錄添加.npmrc 文件,寫入:
unsafe-perm = true文章來源:http://www.zghlxwxcb.cn/news/detail-758975.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-758975.html
注意事項2:
- patch是鎖定版本號的,如果升級了版本,patch內(nèi)容將會失效,最好在package.json能夠鎖定版本號。
- 魔改的同時,也局限了升級的能力,盡量還是去提issue和PR。
到了這里,關(guān)于vue修改node_modules打補丁步驟和注意事項的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!