跳至主要內容
版本:9.x

pnpm link

別名:ln

讓目前的本機套件在系統範圍內或其他位置可以使用。

pnpm link <dir>
pnpm link --global
pnpm link --global <pkg>

選項

--dir <dir>, -C

  • 預設值:目前的工作目錄
  • 類型:路徑字串

將連結位置變更為 <dir>

<dir> 資料夾中的套件連結至執行此指令的套件的 node_modules,或透過 --dir 選項指定。

例如,如果您位於 ~/projects/foo 中,且您執行 pnpm link --dir ../bar,則 foo 將連結至 bar/node_modules/foo

將執行此指令或透過 --dir 選項指定的位置中的套件連結至全域 node_modules,因此它可以透過 pnpm link --global <pkg> 從另一個套件參考。此外,如果套件具有 bin 欄位,則套件的二進位檔將在系統範圍內可用。

將指定的套件 (<pkg>) 從全域 node_modules 連結至執行此指令或透過 --dir 選項指定的套件的 node_modules

pnpm link <dir><dir> 中的套件連結至執行指令的套件的 node_modulespnpm link --dir <dir> 將目前工作目錄中的套件連結至 <dir>

# The current directory is foo
pnpm link ../bar

- foo
- node_modules
- bar -> ../../bar
- bar

# The current directory is bar
pnpm link --dir ../foo

- foo
- node_modules
- bar -> ../../bar
- bar

使用案例

使用其本機版本取代已安裝的套件

假設您有一個專案使用 foo 套件。您想要對 foo 進行變更,並在您的專案中測試它們。在此情況下,您可以使用 pnpm linkfoo 的本機版本連結至您的專案,而 package.json 檔案不會被修改。

cd ~/projects/foo
pnpm install # install dependencies of foo
pnpm link --global # link foo globally
cd ~/projects/my-project
pnpm link --global foo # link foo to my-project

您也可以將套件從一個目錄連結至另一個目錄,而不需要使用全域 node_modules 資料夾

cd ~/projects/foo
pnpm install # install dependencies of foo
cd ~/projects/my-project
pnpm link ~/projects/foo # link foo to my-project

在全域新增二進制檔

如果您正在開發一個具有二進制檔的套件,例如 CLI 工具,您可以使用 pnpm link --global 使二進制檔可在系統範圍內使用。這與使用 pnpm install -g foo 相同,但它將使用 foo 的本地版本,而不是從註冊表下載它。

請記住,只有當套件在 package.json 中具有 bin 欄位時,二進制檔才會可用。

cd ~/projects/foo
pnpm install # install dependencies of foo
pnpm link --global # link foo globally

當您使用 pnpm link 時,連結的套件會從原始碼中建立符號連結。您可以修改連結套件的原始碼,而變更將反映在您的專案中。使用此方法,pnpm 不會 安裝連結套件的相依項,您必須在原始碼中手動安裝它們。當您必須為連結套件使用特定的套件管理員時,這可能會很有用,例如,如果您想為連結套件使用 npm,但為您的專案使用 pnpm。

當您在 dependencies 中使用 file: 協定時,連結的套件會硬連結到您的專案 node_modules,您可以修改連結套件的原始碼,而變更將反映在您的專案中。使用此方法,pnpm 也會安裝連結套件的相依項,覆寫連結套件的 node_modules

資訊

在處理對等相依項時,建議使用 file: 協定。它可以更好地從專案相依項中解析對等相依項,確保連結相依項正確使用您的主專案中指定的相依項版本,從而產生更一致且預期的行為。

功能pnpm linkfile: 協定
符號連結/硬連結符號連結硬連結
反映原始碼修改
安裝連結套件的相依性否(需要手動安裝)是(覆寫連結套件的 node_modules
使用不同的套件管理員來處理相依性可能(例如,對連結套件使用 npm否,它將使用 pnpm