引子
再次碰到調試 npm 本地包的情況,一時想不起來,看了下文檔,實際操作了一下,發現了一些文檔上沒明寫的東西。
介紹
根據文檔介紹,包的鏈接分為兩步。
第一步
在一個包文件夾內執行 npm link
將在全局文件 {prefix}/lib/node_modules/
npm link
命令執行的地方。
第二步
到其它目錄下,執行 npm link packageName
命令,將會創建一個從全局安裝的 packageName 到當前文件內的 node_modules 下的符號鏈接。
需要注意的的是, packageName 是取自包的 package.json 中 name 字段,不是文件夾名稱。
包的名稱可能有作用域前綴,如果有, packageName 也要對應加上。
實踐
基於文檔,結合實際的操作,對照看下產生的效果。
運行環境
- 項目是基於 webpack 簡單配置,本地運行的 server 。
- node 使用 nvm 管理的。
- 項目已引用了包,需在基礎上進行修改調試。
- 系統是 macOS 。
操作
首先在包根目錄下面執行 npm link
命令,出現下面的提示:
到對應的目錄下,發現生成了提示中所說的文件,就是文檔中所說符號鏈接(symlink):
試着改了一下本地的源文件,發現全局包里面對應的文件內容也跟着變化。
然后到項目中執行 npm link packageName
指令,出現了下面的提示:
到 node_modules 下發現對應的依賴包已經發生了變化:
這里的包跟全局那個生成的包是一樣的,包更新了,本地看沒什么效果,原因是本地的 sever 有緩存,需要重新啟動一下。注意這個文件夾圖標多了一個箭頭的標記,未 link
之前沒有這個。
重啟服務后,到源庫修改源碼,發現項目 node_modules 下同步了修改的內容,webpack 也檢測到變化,自動刷新。
修改好后,想要恢復到原本的包,解除 link 該怎么做?很奇怪,在 npm 官方文檔上沒找到說明。
解除 link
到項目下執行下面的命令:
npm unlink --no-save package && npm install
npm uninstall 文檔中可以發現,unlink
其實是 uninstall
的別名,實質上也是刪除了包。
包不需要的 link 的時候,建議也解除,到包目錄下執行下面的命令:
npm unlink