webpack 科學修改 node_modules 某個包的部分檔案為本地檔案
阿新 • • 發佈:2020-07-23
需求總是千變萬化,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.js
中require('fs')
在瀏覽器端會導致 fs not found 錯誤,我們需要修改裡面的程式碼,讓其不報錯。
方法:
- 複製
svgo/lib/svgo/tools.js
到專案任意位置,修改裡面程式碼,記住此處專案位置。 - 修改 webpack 配置。
其中../lib/svgo/tools
是svgo
包裡面的引用路徑,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 },
總結
三種方法各有春秋,需根據需求選擇。