npm link
進入本地的 babel-plugin-function-try-catch 這個 npm 包的根目錄執行:
npm link
上面的命令可以將當前的這個包安裝在全局(mac 中的路徑是 /usr/local/bin
),也就是 npm i -g
安裝包的目錄。
執行后結果如圖:
這樣在本地的 global 下就會存在一個這樣的 npm 包。
由于這是通過軟鏈接的方式實現的,當我們編輯了本地的 babel-plugin-function-try-catch
模塊中的代碼,可以直接在安裝它的工程中馬上看到更新后的效果。
項目中安裝本地 npm 包
接下來,我們(隨便)找一個業務工程去安裝這個 npm 包,本文默認使用這個工程可以點擊去下載。
在工程根目錄執行:
npm link babel-plugin-function-try-catch
上面這一步就是讓當前工程去模擬 npm install
命令,包來源于本地 npm link
過的文件。
執行后,業務工程的 node_modules
中就會有這個包。
眼尖的小伙伴會發現,這個 npm 包不同于其它包,它帶有一個轉折箭頭符號。如下圖所示:
也就是說這是一個軟鏈接,執行 npm link xxx
后它會在系統中做一個快捷方式映射。所以這樣方便我們不斷調試本地正在開發的這個 npm 包。
本地項目工程配置這個 loader
打開當前項目的 webpack 配置文件:
webpack.config.js
rules: [{test: /\.js$/,exclude: /node_modules/,use: [
+ "babel-plugin-function-try-catch","babel-loader"]},
]
執行 npm start
啟動當前前端工程。可以看到原來的代碼
var fn = function(){console.log(11);
}
fn();
在瀏覽器中自動會加上 try/catch,錯誤發生時可以自動捕獲和上報。
至此,完成了本地 npm 包和本地業務工程的關聯!
本地調試 npm 代碼
此時我要修改 catch 中的代碼,將其改為 console.log(error)
,這個時候你只需要修改本地 npm 工程中的代碼即可:
// src/index.js- var catchStatement = template.statement(`ErrorCapture(error)`)();
+ var catchStatement = template.statement(`console.log(error)`)();
然后執行:
npm run build
再切到業務工程重新啟動項目 npm start
即可生效。
當本地 npm 包調試完成后,在其根目錄執行:
npm unlink babel-plugin-function-try-catch
即可解除 link。
如果要發布到 npm 公網,執行 npm publish
即可。
參考: https://segmentfault.com/a/1190000037638502