手把手教你更優(yōu)雅的修改node_modules里的代碼
為什么要改node_modules?
在開發(fā)中,如果有必要修改node_modules里的代碼,有哪幾種方法呢?哪種方法最好呢?
第一種:直接改
這種很容易理解,就是直接進node_modules中,找到相關(guān)包的代碼,并修改相應(yīng)位置代碼,然后重啟項目即可。
但是這樣做存在如下弊端:
- 只能是你自己本地用你修改的代碼,其他人用不了;
- 下次npm install 之后之前修改的代碼都會恢復(fù)原狀;
第二種:獨立維護一個包
假如我使用了包A,它限制了上傳文件的格式,但是我的業(yè)務(wù)要求是放開所有限制,此時我可以這樣:在原有包的基礎(chǔ)上copy一個包B,,修改相關(guān)代碼后把包B推送到npm上,此時我的項目中不需要原來的包了,用我剛維護的包B就可以了,這樣就可以達到效果。以前我也是這么做的。這樣做的缺點就是會增加維護的成本,當然個人認為這種成本可以忽略不計,因為我改完后很長時間從來沒有再次改動過。
第三種: patch-package
這是一個專門用來修改node_modules中包的代碼的工具,使用方式也很簡單:
1、安裝patch-package
npm i patch-package
2、修改node_modules
比如我想修改包A,那么我直接在node_modules中修改,然后執(zhí)行
npx patch-package A
這時候你的根目錄下就會出現(xiàn)patches這個目錄,里面會出現(xiàn)一個包A的補丁文件,這個文件大有用處!
注意:記得要把 patches 這個目錄提交到git或者svn
這個時候你本地已經(jīng)使用到了你修改后的代碼了。那現(xiàn)在的問題是怎么讓其他人也同步到你修改后的代碼。
3、“postinstall”:“patch-package”
在package.json的script中增加:
"postinstall": "patch-package"
這個命令的作用就是:當執(zhí)行npm install的時候,會自動執(zhí)行npm run postinstall這個命令,也就是執(zhí)行patch-package,這時候就會去讀取上面說的 patches目錄,并將那些補丁打到對應(yīng)的包里,達到同步修改代碼的效果??!
以上幾種修改 node_modules源碼的方式,與諸君共享!
補充:修改了node_modules的文件打包后不生效
原因是我們修改的雖然是源碼,并且在我們本地測試的時候生效,但我們打包后引用的是node_modules編譯打包后的文件
問題出在node_modules分為兩個部分:一個是組件的源碼文件,一個是編譯打包后的文件
如果想要解決這個問題,我們可以把想要修改的文件單獨復(fù)制一份出來放到需要使用的文件夾,并且更改主文件中的引用路徑,簡單來說即不引用node_modules里的文件,引用拉出來的那份文件
修改
import 組件名 form '從node_modules里復(fù)制出來的文件的位置'
總結(jié)
到此這篇關(guān)于手把手教你更優(yōu)雅的修改node_modules里的代碼的文章就介紹到這了,更多相關(guān)修改node_modules代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
node.js中TCP Socket多進程間的消息推送示例詳解
這篇文章主要給大家介紹了關(guān)于node.js中TCP Socket多進程間的消息推送的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07Node.js + Redis Sorted Set實現(xiàn)任務(wù)隊列
本文給大家分享的是使用Node.js + Redis Sorted Set實現(xiàn)任務(wù)隊列的方法示例,非常的實用,有需要的小伙伴可以參考下2016-09-09Node.JS使用Sequelize操作MySQL的示例代碼
Node.JS提供了操作數(shù)據(jù)庫的基礎(chǔ)接口,本篇文章主要介紹了Node.JS使用Sequelize操作MySQL的示例代碼,具有一定的參考價值,有興趣的可以了解一下2017-10-10用Nodejs實現(xiàn)在終端中炒股的實現(xiàn)
這篇文章主要介紹了用Nodejs實現(xiàn)在終端中炒股的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10在 Node.js 中使用 async 函數(shù)的方法
利用 async 函數(shù),你可以把基于 Promise 的異步代碼寫得就像同步代碼一樣。一旦你使用 async 關(guān)鍵字來定義了一個函數(shù),那你就可以在這個函數(shù)內(nèi)使用 await 關(guān)鍵字。下面通過本文給大家分享Node.js 中使用 async 函數(shù)的方法,一起看看吧2017-11-11