本地包調試 :npm link


引子

再次碰到調試 npm 本地包的情況,一時想不起來,看了下文檔,實際操作了一下,發現了一些文檔上沒明寫的東西。

介紹

根據文檔介紹,包的鏈接分為兩步。

第一步

在一個包文件夾內執行 npm link 將在全局文件 {prefix}/lib/node_modules/ 內,創建一個符號鏈接(symlink),這個鏈接指向 npm link 命令執行的地方。

第二步

到其它目錄下,執行 npm link packageName 命令,將會創建一個從全局安裝的 packageName 到當前文件內的 node_modules 下的符號鏈接。

需要注意的的是, packageName 是取自包的 package.jsonname 字段,不是文件夾名稱。

包的名稱可能有作用域前綴,如果有, packageName 也要對應加上。

實踐

基於文檔,結合實際的操作,對照看下產生的效果。

運行環境

  • 項目是基於 webpack 簡單配置,本地運行的 server 。
  • node 使用 nvm 管理的。
  • 項目已引用了包,需在基礎上進行修改調試。
  • 系統是 macOS 。

操作

首先在包根目錄下面執行 npm link 命令,出現下面的提示:

79-link

到對應的目錄下,發現生成了提示中所說的文件,就是文檔中所說符號鏈接(symlink):

79-result

試着改了一下本地的源文件,發現全局包里面對應的文件內容也跟着變化。

然后到項目中執行 npm link packageName 指令,出現了下面的提示:

79-link-package

到 node_modules 下發現對應的依賴包已經發生了變化:

79-link-module

這里的包跟全局那個生成的包是一樣的,包更新了,本地看沒什么效果,原因是本地的 sever 有緩存,需要重新啟動一下。注意這個文件夾圖標多了一個箭頭的標記,未 link 之前沒有這個。

重啟服務后,到源庫修改源碼,發現項目 node_modules 下同步了修改的內容,webpack 也檢測到變化,自動刷新。

修改好后,想要恢復到原本的包,解除 link 該怎么做?很奇怪,在 npm 官方文檔上沒找到說明。

到項目下執行下面的命令:

npm unlink --no-save package && npm install

npm uninstall 文檔中可以發現,unlink 其實是 uninstall 的別名,實質上也是刪除了包。

包不需要的 link 的時候,建議也解除,到包目錄下執行下面的命令:

npm unlink

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM