npm-link

建立套件資料夾的符號連結

選擇 CLI 版本

概要

npm link [<package-spec>]
alias: ln

說明

這對於安裝自己的東西非常方便,這樣您就可以在其中工作並反覆測試,而無需持續重新建置。

套件連結是一個兩步驟的程序。

首先,在沒有參數的情況下,在套件資料夾中執行 npm link 將在全域資料夾 {prefix}/lib/node_modules/<package> 中建立一個符號連結,連結到執行 npm link 指令的套件。它還會將套件中的任何 bin 連結到 {prefix}/bin/{name}。請注意,npm link 使用全域前置詞 (請參閱 npm prefix -g 以取得其值)。

接下來,在其他一些位置,npm link package-name 將從全域安裝的 package-name 建立一個符號連結到目前資料夾的 node_modules/

請注意,package-name 取自 package.json而非 來自目錄名稱。

套件名稱可以選擇性地加上範圍前置詞。請參閱 scope。範圍必須在 @ 符號之前,並在斜線之後。

在為 npm publish 建立 tarball 時,如果已連結的套件包含在 bundleDependencies 中,則會透過解析符號連結來將其「快照」到目前狀態。

例如

cd ~/projects/node-redis # go into the package directory
npm link # creates global link
cd ~/projects/node-bloggy # go into some other package directory.
npm link redis # link-install the package

現在,對 ~/projects/node-redis 的任何變更都將反映在 ~/projects/node-bloggy/node_modules/node-redis/ 中。請注意,連結應指向套件名稱,而不是該套件的目錄名稱。

您也可以將兩個步驟簡化為一個步驟。例如,以較短的方式執行上述使用案例

cd ~/projects/node-bloggy # go into the dir of your main project
npm link ../node-redis # link the dir of your dependency

第二行等於執行

(cd ../node-redis; npm link)
npm link redis

也就是說,它首先建立一個全域連結,然後將全域安裝目標連結到專案的 node_modules 資料夾中。

請注意,在這種情況下,您指的是目錄名稱 node-redis,而不是套件名稱 redis

如果您的連結套件有範圍 (請參閱 scope),您的連結指令必須包含該範圍,例如

npm link @myorg/privatepackage

警告

請注意,以這種方式連結的套件相依性預設不會儲存到 package.json,因為假設連結是要取代一般非連結相依性。否則,例如,如果您相依於 redis@^3.0.1,並執行 npm link redis,它將以 file:../path/to/node-redis 取代 ^3.0.1 相依性,這可能不是您想要的!此外,如果其他使用者或開發人員的資料夾設定與您的資料夾設定不完全相同,他們在您的專案中會遇到問題。

如果您要將新的相依性新增為連結,您應該執行 npm install <dep> --package-lock-only 將其新增到相關的元資料。

如果您想要package.jsonpackage-lock.json 檔案中儲存 file: 參照,您可以使用 npm link <dep> --save 這麼做。

工作區使用

npm link <pkg> --workspace <name> 會將相關套件連結為指定工作區的相依性。請注意,如果沒有衝突的相依性,它實際上可能會連結到父專案的 node_modules 資料夾。

npm link --workspace <name> 會建立指向指定工作區的全球連結。

設定

儲存

  • 預設:true,除非使用 npm update,預設為 false
  • 類型:布林值

將已安裝的套件儲存到 package.json 檔案中,作為相依性。

npm rm 指令一起使用時,會從 package.json 中移除相依性。

如果設定為 false,也會防止寫入 package-lock.json

儲存精確

  • 預設:false
  • 類型:布林值

儲存在 package.json 中的相依性將使用精確版本進行設定,而不是使用 npm 的預設 semver 範圍運算子。

全域

  • 預設:false
  • 類型:布林值

在「全域」模式下執行,以便將套件安裝到 prefix 資料夾,而不是目前的作業目錄。請參閱 資料夾,以進一步瞭解行為的差異。

  • 套件會安裝到 {prefix}/lib/node_modules 資料夾,而不是目前的作業目錄。
  • bin 檔案會連結到 {prefix}/bin
  • man 頁面會連結到 {prefix}/share/man

安裝策略

  • 預設值:hoisted
  • 類型:hoistednestedshallowlinked

設定在 node_modules 中安裝套件的策略。hoisted(預設值):在頂層安裝非重複的套件,並在目錄結構中視需要重複安裝。nested:在原地安裝,不提升。shallow(以前稱為 --global-style)僅在頂層安裝直接相依性。linked:在 node_modules/.store 中安裝,在原地連結,未提升。

舊式組合

  • 預設:false
  • 類型:布林值
  • 已停用:此選項已停用,建議使用 --install-strategy=nested

不要在 node_modules 中提升套件安裝,而是以相依性的方式安裝套件。這可能會造成非常深的目錄結構和重複的套件安裝,因為沒有重複刪除。設定 --install-strategy=nested

全域樣式

  • 預設:false
  • 類型:布林值
  • 已停用:此選項已停用,建議使用 --install-strategy=shallow

僅在頂層 node_modules 中安裝直接相依性,但在較深的相依性上提升。設定 --install-strategy=shallow

嚴格同儕依賴

  • 預設:false
  • 類型:布林值

如果設定為 true,且未設定 --legacy-peer-deps,則 任何 相衝突的 peerDependencies 都會視為安裝失敗,即使 npm 可以根據非同儕相依性關係合理猜測適當的解決方案。

預設情況下,相依性圖中深處的相衝突 peerDependencies 將使用最近的非同儕相依性規格來解決,即使這樣做會導致某些套件收到超出其套件 peerDependencies 物件中設定範圍的同儕相依性。

執行此類覆寫時,會印出警告,說明衝突和涉及的套件。如果設定 --strict-peer-deps,則此警告會視為失敗。

套件鎖定

  • 預設值:true
  • 類型:布林值

如果設為 false,則在安裝時忽略 package-lock.json 檔案。如果 save 為 true,這也會防止寫入 package-lock.json

省略

  • 預設值:如果 NODE_ENV 環境變數設為 'production',則為 'dev',否則為空。
  • 類型:'dev'、'optional' 或 'peer'(可設定多次)

在磁碟上從安裝樹中省略的相依性類型。

請注意,這些相依性仍然會解析,並新增到 package-lock.jsonnpm-shrinkwrap.json 檔案中。它們只是不會實際安裝在磁碟上。

如果套件類型同時出現在 --include--omit 清單中,則會包含該類型。

如果產生的省略清單包含 'dev',則 NODE_ENV 環境變數會針對所有生命週期指令碼設為 'production'

包含

  • 預設值
  • 類型:'prod'、'dev'、'optional' 或 'peer'(可設定多次)

允許定義要安裝的相依性類型的選項。

這是 --omit=<type> 的反向操作。

--include 中指定的相依性類型不會被省略,不論在命令列中指定省略/包含的順序為何。

忽略指令碼

  • 預設:false
  • 類型:布林值

如果為 true,npm 就不會執行在 package.json 檔案中指定的指令碼。

請注意,明確用於執行特定指令碼的指令,例如 npm startnpm stopnpm restartnpm testnpm run-script,如果設定了 ignore-scripts,仍然會執行它們預期的指令碼,但不會執行任何前置或後置指令碼。

稽核

  • 預設值:true
  • 類型:布林值

如果為「true」,則會將稽核報告與目前的 npm 指令一起提交到預設登錄和所有為範圍設定的登錄。請參閱 npm audit 的文件,以了解提交內容的詳細資訊。

  • 預設值:true
  • 類型:布林值

指示 npm 為套件可執行檔建立符號連結(或在 Windows 上建立 .cmd shim)。

設為 false 以不執行此動作。這可以用於解決某些檔案系統不支援符號連結的問題,即使在表面上是 Unix 系統也是如此。

資金

  • 預設值:true
  • 類型:布林值

當為「true」時,會在每個 npm install 的結尾顯示訊息,確認需要尋找資金的相依項數量。請參閱 npm fund 以取得詳細資料。

空跑

  • 預設:false
  • 類型:布林值

表示您不希望 npm 進行任何變更,且它應該只報告它會執行的動作。這可以傳遞給任何修改您本機安裝的指令,例如 installupdatededupeuninstall,以及 packpublish

注意:其他網路相關指令不會遵守這個設定,例如 dist-tagsowner 等。

工作區

  • 預設值
  • 類型:字串(可以設定多次)

啟用在當前專案設定的工作空間中執行指令,同時透過只執行此設定選項所定義的工作空間來進行篩選。

下列為 workspace 設定的有效值:

  • 工作空間名稱
  • 工作空間目錄的路徑
  • 父工作空間目錄的路徑(會選取該資料夾內的所有工作空間)

當設定為 npm init 指令時,這可以設定為尚未存在的資料夾的工作空間,以建立資料夾並將其設定為專案中的全新工作空間。

此值不會匯出到子程式的環境中。

工作區

  • 預設值:null
  • 類型:null 或布林值

設為 true 以在所有設定的工作空間中執行指令。

明確將此設定為 false 會導致 install 等指令完全忽略工作空間。未明確設定時:

  • node_modules 樹狀結構中執行的指令(install、update 等)會將工作空間連結到 node_modules 資料夾中。- 執行其他動作的指令(test、exec、publish 等)會在根專案中執行,除非workspace 設定中指定一個或多個工作空間。

此值不會匯出到子程式的環境中。

包含工作區根目錄

  • 預設:false
  • 類型:布林值

當工作區對指令啟用時,包含工作區根目錄。

當為 false 時,透過 workspace 設定指定個別工作區,或透過 workspaces 旗標指定所有工作區,將會導致 npm 僅在指定工作區執行,而不在根目錄專案執行。

此值不會匯出到子程式的環境中。

  • 預設:false
  • 類型:布林值

設定時,file: 協定相依項將會打包並安裝為一般相依項,而不是建立符號連結。此選項對工作區沒有影響。

另請參閱