色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

源碼補丁神器—patch-package

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-07-30 10:51 ? 次閱讀

一、背景

vue項目中使用 vue-pdf 第三方插件預覽pdf,書寫業務代碼完美運行,pdf文件內容正常預覽無問題。后期需求有變,業務需求增加電子簽章功能。這個時候pdf文件的內容可以顯示出來,但是公司的電子簽章無法顯示。這令人沮喪,因為已經編寫了許多特定于此依賴項的代碼,如果替換依賴庫,這些代碼很可能會被浪費。更重要的是其已經在生產環境運行。

在不更改依賴庫進行大改動的前提下,先查找問題所在。經查發現此為官方bug 無法顯示簽章。進一步查詢發現根源是其依賴包 pdf.js 的 電子簽章不顯示。

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

如何解決此問題?

二、常用方法

1. 給依賴包提 issue 等待他人修復并發布

2. 給依賴包提 pr 自行修復并等待發布

3. 整體copy項目法

直接引用法

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

發布私庫法

適合多項目中使用同一個依賴包的場景,可以把修改后的源碼發布到私有的倉庫上

4. 修改引用法

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

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

以上方法均有弊端:

前兩種修復周期很長且依賴第三方,修復時間不定,不適合解決當前問題。

后幾種方法都比較復雜,并且會導致項目臃腫,更容易忘記自己修改了源碼的哪個部分,而且更新麻煩,每次都需要手動去更新代碼,無法與插件同步更新。

有沒有一種方法,可以優雅修改node_modules的源碼?

三、patch-package

?patch-package 讓程序開發者立即修復并保留 npm 依賴項。是一個給依賴項打補丁的完美方案。

# 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

如果你不需要在生產中運行

npm i patch-package --save-dev

yarn、pnpm、docker安裝命令可查看其 git官網。?

2. 修改npm包

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

3. 生成補丁

npx patch-package package-name

4. 添加自動執行命令

In package.json

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

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

wKgaomandYWAK35GAAJIUePYles986.jpg

??

執行npx patch-package pdfjs-dist,生成補丁,會在文件目錄中生成一個patches文件夾,如下:

wKgZomandYaAKxFOAAIRwSjkvNM629.jpg

??

至此項目中的bug已修復,如何讓更改內容在團隊其他同事拉取代碼后執行?

添加自執行命令如下,會在 npm install 后知執行。

wKgaomandYeAS_qtAAMMGc6ABoY933.jpg

??

patch文件是什么?

其實就是一些git diff記錄描述。

原理: patch-package會將當前 node_modules下的源碼與原始源碼進行 git diff,并在項目根目錄下生成一個patch補丁文件。

如何自測補丁是否生效?

手動刪除項目中的node_modules,并重新執行npm install命令安裝依賴包。安裝成功后查看之前修改的 node_modules 依賴包中的文件,查看修改的代碼是否依然存在,如果之前修改代碼依然存在即表明補丁文件已經生效,如果你之前修改的代碼不存在即表明補丁文件沒有生效。

四、patch-package 好處

版本預檢

當依賴項發生更改時,會以紅色大寫字母通知,需要檢查所做修復是否仍然有效。npx patch-package 會直接報錯**ERROR** Failed to apply patch for package xxxx at path,通過提示可以更方便定位問題。

節省空間

無需拷貝一份源碼,使用git diff來記錄補丁更節省空間,安全又便捷。

可審查

補丁可以作為正常審查過程的一部分進行審查。

五、注意事項

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

?長期還是需要徹底修復第三方包缺陷并逐步移除項目中的 .patch 文件

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 源碼
    +關注

    關注

    8

    文章

    651

    瀏覽量

    29339
收藏 人收藏

    評論

    相關推薦

    南亞科技與補丁科技攜手開發定制超高帶寬內存

    近日,臺灣地區知名的DRAM內存制造商南亞科技宣布,已與專業DRAM設計公司補丁科技達成戰略合作,共同致力于定制超高帶寬內存(Customized Ultra-High-Bandwidth
    的頭像 發表于 12-20 14:28 ?196次閱讀

    如何在Petalinux下Patch u-boot源碼

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

    TVP5150AM1補丁代碼下載指南

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

    TVP5147M1補丁代碼下載指南

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

    TVP5160補丁代碼下載指南

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

    TVP5158補丁代碼下載指南

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

    TVP5151補丁代碼下載指南

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

    NONOS_SDK 1.5.4.1導致致命錯誤的補丁怎么處理?

    將 1.5.4.1 補丁文件應用到我的穩定 1.5.4 代碼庫后,閃爍我的eagle.flash.bin和eagle.irom0text.bin時,我的ESP8266模塊(ESP-12 或
    發表于 07-11 07:57

    UCGUI單片機源碼

    UCGUI單片機源碼
    發表于 07-04 17:11 ?1次下載

    【米爾-瑞米派兼容樹莓派擴展模塊-試用體驗】 實時系統移植

    進入到內核源碼補丁,如下: hjx@myir-server:~/renesas/04_Sources/myir-renesas-linux for p in `ls -1 ../patches
    發表于 06-19 16:57

    什么是源碼源碼有什么作用?源碼組件是什么?源碼可二次開發嗎?

    源碼,也稱為源程序,是指未編譯的按照一定的程序設計語言規范書寫的文本文件,是一系列人類可讀的計算機語言指令。
    的頭像 發表于 05-25 14:55 ?1.6w次閱讀
    什么是<b class='flag-5'>源碼</b>?<b class='flag-5'>源碼</b>有什么作用?<b class='flag-5'>源碼</b>組件是什么?<b class='flag-5'>源碼</b>可二次開發嗎?

    STM32 Cryptographic library package V2.0.6怎么使用?

    誰用過 STM32 Cryptographic library package V2.0.6可以說下怎么使用嗎
    發表于 05-14 07:44

    RK3568開發板源碼編譯過程

    本文將為大家介紹在飛凌嵌入式OK3568-C開發板上進行源碼編譯的過程,希望能夠對各位工程師小伙伴有所幫助。話不多說,我們馬上進入正題。 一、準備源碼 1. 創建工作目錄 $mkdir -p
    發表于 04-18 15:30

    請問Systemverilog中如何使用VHDL的package?

    現在需要使用system verilog寫代碼,但是想復用之前VHDL的package,里面有寫的現成的function等,請問如何調用呢。總是報錯說找不到_pkg
    發表于 03-12 15:37

    RX系列的RX Driver Package Ver.1.42的應用說明

    電子發燒友網站提供《RX系列的RX Driver Package Ver.1.42的應用說明.pdf》資料免費下載
    發表于 01-30 15:13 ?0次下載
    RX系列的RX Driver <b class='flag-5'>Package</b> Ver.1.42的應用說明
    主站蜘蛛池模板: 亚洲乱码日产精品BD在线下载| 999久久久无码国产精蜜柚| 色欲天天天综合网免费| 色mimi| 午夜福到在线4国产| 亚洲aaaa级特黄毛片| 亚洲免费无l码中文在线视频| 一本到高清视频在线观看三区| 在线免费观看a视频| 97在线播放| 成人无码国产AV免费看| 国产精品卡1卡2卡三卡四| 国精产品一区一区三区有限在线| 久久99精国产一区二区三区四区| 麻豆国产MV视频| 青春草久久| 小小水蜜桃3视频在线观看| 一本色道久久综合亚洲AV蜜桃 | 国产精品青草久久福利不卡| 国产在线午夜| 空姐厕所啪啪啪| 人妻少妇69式99偷拍| 香蕉久久av一区二区三区| 一本色道久久综合亚洲AV蜜桃| 99热只有这里有精品| 高清日本片免费观看| 国内精品乱码卡一卡2卡三卡新区| 久久青青热| 日本邪恶少女漫画大全| 亚洲爱视频| 87.6在线收听| 国产精品VIDEOS麻豆TUBE| 久久观看视频| 日本 一二三 不卡 免费| 亚洲国产中文字幕在线视频综合 | 久久免费看少妇级毛片蜜臀| 欧美高清xxx| 亚洲 日韩 自拍 视频一区| 100国产精品人妻无码| 丰满大爆乳波霸奶| 久久国产精品高清一区二区三区|