1. 程式人生 > 實用技巧 >webpack 科學修改 node_modules 某個包的部分檔案為本地檔案

webpack 科學修改 node_modules 某個包的部分檔案為本地檔案

需求總是千變萬化,npm 不是萬能的,node_modules 裡面的檔案也是需要維護的。

如果npm install安裝了某個包,然而這個包裡面部分檔案不支援你的需求,這時候怎麼辦?

比如:https://github.com/svg/svgo此包可以批量處理svg檔案,但是是nodejs執行環境,如何做到在瀏覽器端執行?如: https://tiny.jijian.link 這個瀏覽器端的圖片壓縮神器。

方法一

直接修改 node_modules 檔案,當然你得記得改了些啥,否則下次npm install檔案就會被覆蓋。

方法二

使用patch-package修改,還是不夠完美,需要額外安裝patch-package

,還需要執行各種命令。

詳細閱讀: https://blog.jijian.link/2020-07-23/webpack-alter-file/

方法三

使用webpack alias實現替換檔案。此方法僅適用於 webpack 維護的專案。

alias 作用基本都知道,設定路徑別名,可使用短路引入檔案。

其實 alias 作用不僅於此,還能作用於 node_modules 中的檔案。

比如:svgo/lib/svgo/tools.jsrequire('fs')在瀏覽器端會導致 fs not found 錯誤,我們需要修改裡面的程式碼,讓其不報錯。

方法:

  1. 複製svgo/lib/svgo/tools.js到專案任意位置,修改裡面程式碼,記住此處專案位置。
  2. 修改 webpack 配置。
    其中../lib/svgo/toolssvgo包裡面的引用路徑,src/svgo/lib/svgo/tools.js是修改後的檔案路徑。
    1 chainWebpack: config => {  
    2   config.resolve.alias.set('../lib/svgo/tools', require('path').resolve(__dirname, 'src/svgo/lib/svgo/tools.js'));
    3   return config;
    4 },

總結

三種方法各有春秋,需根據需求選擇。