一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

源碼補(bǔ)丁神器—patch-package

京東云 ? 來(lái)源:jf_75140285 ? 作者:jf_75140285 ? 2024-07-30 10:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、背景

vue項(xiàng)目中使用 vue-pdf 第三方插件預(yù)覽pdf,書(shū)寫(xiě)業(yè)務(wù)代碼完美運(yùn)行,pdf文件內(nèi)容正常預(yù)覽無(wú)問(wèn)題。后期需求有變,業(yè)務(wù)需求增加電子簽章功能。這個(gè)時(shí)候pdf文件的內(nèi)容可以顯示出來(lái),但是公司的電子簽章無(wú)法顯示。這令人沮喪,因?yàn)橐呀?jīng)編寫(xiě)了許多特定于此依賴項(xiàng)的代碼,如果替換依賴庫(kù),這些代碼很可能會(huì)被浪費(fèi)。更重要的是其已經(jīng)在生產(chǎn)環(huán)境運(yùn)行。

在不更改依賴庫(kù)進(jìn)行大改動(dòng)的前提下,先查找問(wèn)題所在。經(jīng)查發(fā)現(xiàn)此為官方bug 無(wú)法顯示簽章。進(jìn)一步查詢發(fā)現(xiàn)根源是其依賴包 pdf.js 的 電子簽章不顯示。

問(wèn)題已定位到,要修改顯示電子簽章的代碼是在node_modules的依賴包中。

如何解決此問(wèn)題?

二、常用方法

1. 給依賴包提 issue 等待他人修復(fù)并發(fā)布

2. 給依賴包提 pr 自行修復(fù)并等待發(fā)布

3. 整體copy項(xiàng)目法

直接引用法

直接copy依賴包的源碼,本地引用,不再通過(guò)npm包方式引用

發(fā)布私庫(kù)法

適合多項(xiàng)目中使用同一個(gè)依賴包的場(chǎng)景,可以把修改后的源碼發(fā)布到私有的倉(cāng)庫(kù)上

4. 修改引用法

配置一個(gè)webpack alias別名,如'原始文件的引用路徑': '修改后文件的引用路徑',使得最終修改后的文件被引用,如:

resolve: {  
    alias: {  
        'pdfjs': path.resolve(__dirname, './patched/pdfjs/*'), 
    }
}

以上方法均有弊端:

前兩種修復(fù)周期很長(zhǎng)且依賴第三方,修復(fù)時(shí)間不定,不適合解決當(dāng)前問(wèn)題。

后幾種方法都比較復(fù)雜,并且會(huì)導(dǎo)致項(xiàng)目臃腫,更容易忘記自己修改了源碼的哪個(gè)部分,而且更新麻煩,每次都需要手動(dòng)去更新代碼,無(wú)法與插件同步更新。

有沒(méi)有一種方法,可以優(yōu)雅修改node_modules的源碼?

三、patch-package

?patch-package 讓程序開(kāi)發(fā)者立即修復(fù)并保留 npm 依賴項(xiàng)。是一個(gè)給依賴項(xiàng)打補(bǔ)丁的完美方案。

# fix a bug in one of your dependencies
vim node_modules/some-package/brokenFile.js

# run patch-package to create a .patch file
npx patch-package some-package

# commit the patch file to share the fix with your team
git add patches/some-package+3.14.15.patch
git commit -m "fix brokenFile.js in some-package"

使用方法:

1.安裝

npm i patch-package

如果你不需要在生產(chǎn)中運(yùn)行

npm i patch-package --save-dev

yarn、pnpm、docker安裝命令可查看其 git官網(wǎng)。?

2. 修改npm包

更改node_modules 文件夾中要修改依賴包的文件

3. 生成補(bǔ)丁

npx patch-package package-name

4. 添加自動(dòng)執(zhí)行命令

In package.json

 "scripts": {
    +  "postinstall": "patch-package"
 }

在本文示例中,在node_modules找到要修改的依賴包pdfjs-dist,修改代碼如下:

wKgaomandYWAK35GAAJIUePYles986.jpg

??

執(zhí)行npx patch-package pdfjs-dist,生成補(bǔ)丁,會(huì)在文件目錄中生成一個(gè)patches文件夾,如下:

wKgZomandYaAKxFOAAIRwSjkvNM629.jpg

??

至此項(xiàng)目中的bug已修復(fù),如何讓更改內(nèi)容在團(tuán)隊(duì)其他同事拉取代碼后執(zhí)行?

添加自執(zhí)行命令如下,會(huì)在 npm install 后知執(zhí)行。

wKgaomandYeAS_qtAAMMGc6ABoY933.jpg

??

patch文件是什么?

其實(shí)就是一些git diff記錄描述。

原理: patch-package會(huì)將當(dāng)前 node_modules下的源碼與原始源碼進(jìn)行 git diff,并在項(xiàng)目根目錄下生成一個(gè)patch補(bǔ)丁文件。

如何自測(cè)補(bǔ)丁是否生效?

手動(dòng)刪除項(xiàng)目中的node_modules,并重新執(zhí)行npm install命令安裝依賴包。安裝成功后查看之前修改的 node_modules 依賴包中的文件,查看修改的代碼是否依然存在,如果之前修改代碼依然存在即表明補(bǔ)丁文件已經(jīng)生效,如果你之前修改的代碼不存在即表明補(bǔ)丁文件沒(méi)有生效。

四、patch-package 好處

版本預(yù)檢

當(dāng)依賴項(xiàng)發(fā)生更改時(shí),會(huì)以紅色大寫(xiě)字母通知,需要檢查所做修復(fù)是否仍然有效。npx patch-package 會(huì)直接報(bào)錯(cuò)**ERROR** Failed to apply patch for package xxxx at path,通過(guò)提示可以更方便定位問(wèn)題。

節(jié)省空間

無(wú)需拷貝一份源碼,使用git diff來(lái)記錄補(bǔ)丁更節(jié)省空間,安全又便捷。

可審查

補(bǔ)丁可以作為正常審查過(guò)程的一部分進(jìn)行審查。

五、注意事項(xiàng)

?直接修改 node_modules 下的代碼不是被推薦的做法,應(yīng)該僅在應(yīng)急情況下考慮

?長(zhǎng)期還是需要徹底修復(fù)第三方包缺陷并逐步移除項(xiàng)目中的 .patch 文件

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    671

    瀏覽量

    30321
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    (ST大賽三等獎(jiǎng)作品)超聲波自拍神器實(shí)例項(xiàng)目

    (ST大賽三等獎(jiǎng)作品)超聲波自拍神器電路圖:
    發(fā)表于 05-28 21:04

    用DevEco Studio增量補(bǔ)丁修復(fù)功能,讓鴻蒙應(yīng)用的調(diào)試效率大增

    Reload和支持能力更為廣泛的Apply Changes。那么這兩種補(bǔ)丁修復(fù)有哪些使用場(chǎng)景,又分別是何種原理?且聽(tīng)下文分解。 Hot Reload:ArkTS開(kāi)發(fā)加速神器 ArkTS
    發(fā)表于 04-14 17:35

    用DevEco Studio增量補(bǔ)丁修復(fù)功能,讓鴻蒙應(yīng)用的調(diào)試效率大增

    的Apply Changes。那么這兩種補(bǔ)丁修復(fù)有哪些使用場(chǎng)景,又分別是何種原理?且聽(tīng)下文分解。 Hot Reload:ArkTS開(kāi)發(fā)加速神器 ArkTS是HarmonyOS應(yīng)用開(kāi)發(fā)的官方高級(jí)語(yǔ)言,在
    發(fā)表于 04-14 14:47

    如何獲取STM32MP1的Distribution Package軟件開(kāi)發(fā)包?

    Developer Package已經(jīng)獲取到了,Distribution Package需要repo下載。 現(xiàn)在沒(méi)有訪問(wèn)外網(wǎng)的IP和端口號(hào),有沒(méi)有什么別的方法能下載到呢?
    發(fā)表于 03-13 06:03

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-本地倉(cāng)庫(kù)管理之當(dāng)前分支內(nèi)的操作

    *所在分支為當(dāng)前分支,即master分支當(dāng)前分支進(jìn)行源碼修改時(shí)簡(jiǎn)單流程圖如下:在當(dāng)前分支上進(jìn)行源碼修改前,需要先查看當(dāng)前分支工作區(qū)是否干凈,干凈則進(jìn)行修改工作。如果之前在分支上做過(guò)修改且沒(méi)有提交,需要進(jìn)行
    發(fā)表于 01-20 09:50

    飛凌嵌入式ElfBoard ELF 1板卡-本地倉(cāng)庫(kù)管理之當(dāng)前分支內(nèi)的操作

    *所在分支為當(dāng)前分支,即master分支 當(dāng)前分支進(jìn)行源碼修改時(shí)簡(jiǎn)單流程圖如下: 在當(dāng)前分支上進(jìn)行源碼修改前,需要先查看當(dāng)前分支工作區(qū)是否干凈,干凈則進(jìn)行修改工作。如果之前在分支上做過(guò)修改且沒(méi)有
    發(fā)表于 01-18 10:25

    南亞科技與補(bǔ)丁科技攜手開(kāi)發(fā)定制超高帶寬內(nèi)存

    近日,臺(tái)灣地區(qū)知名的DRAM內(nèi)存制造商南亞科技宣布,已與專業(yè)DRAM設(shè)計(jì)公司補(bǔ)丁科技達(dá)成戰(zhàn)略合作,共同致力于定制超高帶寬內(nèi)存(Customized Ultra-High-Bandwidth
    的頭像 發(fā)表于 12-20 14:28 ?635次閱讀

    如何在Petalinux下Patch u-boot源碼

    在軟件開(kāi)發(fā)過(guò)程中我們經(jīng)常遇到用 Patch 來(lái)傳遞和更新代碼的場(chǎng)景。本文以一個(gè)端到端的例子來(lái)演示在 Petalinux 使用過(guò)程中,如何給 u-boot 的源碼生成 Patch 并在 Petalinux 中編譯。
    的頭像 發(fā)表于 12-04 16:26 ?1796次閱讀
    如何在Petalinux下<b class='flag-5'>Patch</b> u-boot<b class='flag-5'>源碼</b>

    求助大佬們,裝了補(bǔ)丁的pads9.5,頁(yè)面還是有這種問(wèn)題怎么辦?

    求助,裝了補(bǔ)丁的pads9.5,頁(yè)面還是有這種問(wèn)題怎么辦?
    發(fā)表于 11-01 16:30

    TVP5150AM1補(bǔ)丁代碼下載指南

    電子發(fā)燒友網(wǎng)站提供《TVP5150AM1補(bǔ)丁代碼下載指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-30 14:11 ?0次下載
    TVP5150AM1<b class='flag-5'>補(bǔ)丁</b>代碼下載指南

    TVP5147M1補(bǔ)丁代碼下載指南

    電子發(fā)燒友網(wǎng)站提供《TVP5147M1補(bǔ)丁代碼下載指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-30 11:27 ?0次下載
    TVP5147M1<b class='flag-5'>補(bǔ)丁</b>代碼下載指南

    TVP5160補(bǔ)丁代碼下載指南

    電子發(fā)燒友網(wǎng)站提供《TVP5160補(bǔ)丁代碼下載指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-30 11:01 ?0次下載
    TVP5160<b class='flag-5'>補(bǔ)丁</b>代碼下載指南

    TVP5158補(bǔ)丁代碼下載指南

    電子發(fā)燒友網(wǎng)站提供《TVP5158補(bǔ)丁代碼下載指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-30 10:48 ?0次下載
    TVP5158<b class='flag-5'>補(bǔ)丁</b>代碼下載指南

    TVP5151補(bǔ)丁代碼下載指南

    電子發(fā)燒友網(wǎng)站提供《TVP5151補(bǔ)丁代碼下載指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-30 09:37 ?0次下載
    TVP5151<b class='flag-5'>補(bǔ)丁</b>代碼下載指南

    ESP32 崩潰后調(diào)試信息定位到源碼方法

    arduino 通過(guò)調(diào)試信息定位出錯(cuò)源碼
    的頭像 發(fā)表于 08-27 14:29 ?1728次閱讀