npm-install

安裝套件

選擇 CLI 版本

概要

npm install [<package-spec> ...]
aliases: add, i, in, ins, inst, insta, instal, isnt, isnta, isntal, isntall

說明

此指令會安裝套件,以及其依賴的任何套件。如果套件有 package-lock、npm shrinkwrap 檔案或 yarn 鎖定檔,則依賴項目的安裝將由其驅動,並遵循下列優先順序

  • npm-shrinkwrap.json
  • package-lock.json
  • yarn.lock

請參閱 package-lock.jsonnpm shrinkwrap

一個 套件

  • a) 包含由 package.json 檔案描述的程式之資料夾
  • b) 包含 (a) 的壓縮 tarball
  • c) 解析為 (b) 的網址
  • d) 發佈在註冊表 (請參閱 registry) 上的 <name>@<version> (搭配 (c))
  • e) 指向 (d) 的 <name>@<tag> (請參閱 npm dist-tag)
  • f) 具有滿足 (e) 的「最新」標籤的 <name>
  • g) 解析為 (a) 的 <git 遠端網址>

即使您從未發佈套件,如果您只想撰寫節點程式 (a),而且可能還想在將其打包成 tarball (b) 後輕鬆在其他地方安裝它,您仍然可以獲得使用 npm 的許多好處。

  • npm install (在套件目錄中,沒有參數)

    將相依性安裝到本機 node_modules 資料夾。

    在全域模式 (即,在命令中附加 -g--global),它會將目前的套件內容 (即,目前的作業目錄) 安裝為全域套件。

    預設情況下,npm install 會安裝 package.json 中列為相依性的所有模組。

    使用 --production 標記 (或當 NODE_ENV 環境變數設為 production 時),npm 將不會安裝 devDependencies 中列出的模組。要在 NODE_ENV 環境變數設為 production 時安裝 dependenciesdevDependencies 中列出的所有模組,您可以使用 --production=false

    注意:--production 標記在將相依性新增到專案時沒有特別的意義。

  • npm install <folder>:

    如果 <folder> 位於專案根目錄內,其相依性將會安裝,並可能提升到頂層 node_modules,就像其他類型的相依性一樣。如果 <folder> 位於專案根目錄外,npm 將不會在 <folder> 目錄中安裝套件相依性,但它會建立一個指向 <folder> 的符號連結。

    注意:如果您想要安裝目錄的內容,就像從註冊表安裝套件一樣,而不是建立連結,您需要使用 --install-links 選項。

    範例

    npm install ../../other-package --install-links
    npm install ./sub-package
  • npm install <tarball 檔案>:

    安裝位於檔案系統中的套件。注意:如果您只想將開發目錄連結到您的 npm 根目錄,您可以使用 npm link 輕鬆執行此操作。

    Tarball 需求

    • 檔案名稱必須使用 .tar.tar.gz.tgz 作為副檔名。
    • 套件內容應位於 tarball 內部的子資料夾中(通常稱為 package/)。npm 在安裝套件時會移除一層目錄層級(相當於執行 tar x --strip-components=1)。
    • 套件必須包含一個 package.json 檔案,其中包含 nameversion 屬性。

    範例

    npm install ./package.tgz
  • npm install <tarball url>:

    擷取 tarball url,然後安裝它。為了區分此選項和其他選項,參數必須以「http://」或「https://」開頭

    範例

    npm install https://github.com/indexzero/forever/tarball/v0.5.6
  • npm install [<@scope>/]<name>:

    執行 <name>@<tag> 安裝,其中 <tag> 是「標籤」設定檔。(請參閱 config。設定檔的預設值為 latest。)

    在大部分情況下,這將安裝標記為 latest 的模組版本於 npm 登錄檔中。

    範例

    npm install sax

    npm install 預設將任何指定的套件儲存到 dependencies 中。此外,您可以使用一些額外的旗標來控制儲存位置和方式

    • -P, --save-prod:套件將出現在您的 dependencies 中。除非存在 -D-O,否則這是預設值。

    • -D, --save-dev:套件將出現在您的 devDependencies 中。

    • -O, --save-optional:套件將出現在您的 optionalDependencies 中。

    • --no-save:防止儲存到 dependencies

    當使用上述任何選項將相依性儲存到您的 package.json 時,還有兩個額外的選用旗標

    • -E, --save-exact:儲存的相依性將設定為確切版本,而不是使用 npm 的預設 semver 範圍運算子。

    • -B, --save-bundle:儲存的相依性也會新增到您的 bundleDependencies 清單中。

    此外,如果您有 npm-shrinkwrap.jsonpackage-lock.json,它也會更新。

    <scope> 是選用的。套件將從與指定範圍關聯的登錄下載。如果沒有登錄與給定的範圍關聯,則假設為預設登錄。請參閱 scope

    注意:如果您沒有在範圍名稱上包含 @ 符號,npm 會將其解釋為 GitHub 儲存庫,請參閱下方。範圍名稱也必須後面接斜線。

    範例

    npm install sax
    npm install githubname/reponame
    npm install @myorg/privatepackage
    npm install node-tap --save-dev
    npm install dtrace-provider --save-optional
    npm install readable-stream --save-exact
    npm install ansi-regex --save-bundle

    注意:如果在目前的作業目錄中有命名為 <name> 的檔案或資料夾,則它將嘗試安裝該檔案或資料夾,並且僅在它無效時才嘗試依名稱擷取套件。

  • npm install <alias>@npm:<name>:

    在自訂別名下安裝套件。允許同名套件的多個版本並排存在,對於名稱較長的套件提供更方便的匯入名稱,以及使用 git 分支替換或分岔的 npm 套件作為替換。別名僅在您的專案中運作,而且不會重新命名傳遞依賴關係中的套件。別名應遵循 validate-npm-package-name 中所述的命名慣例。

    範例

    npm install my-react@npm:react
    npm install jquery2@npm:jquery@2
    npm install jquery3@npm:jquery@3
    npm install npa@npm:npm-package-arg
  • npm install [<@scope>/]<name>@<tag>:

    安裝由指定標籤引用的套件版本。如果標籤不存在於該套件的登錄資料中,則此操作將會失敗。

    範例

    npm install sax@latest
    npm install @myorg/mypackage@latest
  • npm install [<@scope>/]<name>@<version>:

    安裝指定的套件版本。如果版本尚未發佈到登錄,則此操作將會失敗。

    範例

    npm install sax@0.1.1
    npm install @myorg/privatepackage@1.5.0
  • npm install [<@scope>/]<name>@<version range>:

    安裝與指定版本範圍相符的套件版本。這將遵循 package.json 中所述的解析依賴關係的相同規則。

    請注意,大多數版本範圍都必須放入引號中,以便您的 shell 將其視為單一引數。

    範例

    npm install sax@">=0.1.0 <0.2.0"
    npm install @myorg/privatepackage@"16 - 17"
  • npm install <git remote url>:

    從託管的 git 供應商安裝套件,並使用 git 複製它。對於完整的 git 遠端 URL,將只嘗試該 URL。

    <protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]

    <protocol>gitgit+sshgit+httpgit+httpsgit+file 之一。

    如果提供了 #<commit-ish>,它將用於複製該提交。如果提交-ish 的格式為 #semver:<semver><semver> 可以是任何有效的 semver 範圍或精確版本,npm 將在遠程儲存庫中尋找與該範圍匹配的任何標籤或參照,就像它對註冊表依賴項所做的那樣。如果未指定 #<commit-ish>#semver:<semver>,則使用儲存庫的預設分支。

    如果儲存庫使用子模組,這些子模組也會被複製。

    如果正在安裝的套件包含 prepare 腳本,則其 dependenciesdevDependencies 將會被安裝,並且在套件封裝並安裝之前,將會執行 prepare 腳本。

    npm 識別以下 git 環境變數,並在執行 git 時將其新增到環境中

    • GIT_ASKPASS
    • GIT_EXEC_PATH
    • GIT_PROXY_COMMAND
    • GIT_SSH
    • GIT_SSH_COMMAND
    • GIT_SSL_CAINFO
    • GIT_SSL_NO_VERIFY

    請參閱 git 手冊頁以取得詳細資訊。

    範例

    npm install git+ssh://git@github.com:npm/cli.git#v1.0.27
    npm install git+ssh://git@github.com:npm/cli#pull/273
    npm install git+ssh://git@github.com:npm/cli#semver:^5.0
    npm install git+https://isaacs@github.com/npm/cli.git
    npm install git://github.com/npm/cli.git#v1.0.27
    GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/cli.git
  • npm install <githubname>/<githubrepo>[#<commit-ish>]:

  • npm install github:<githubname>/<githubrepo>[#<commit-ish>]:

    透過嘗試使用 git 複製,安裝位於 https://github.com/githubname/githubrepo 的套件。

    如果提供了 #<commit-ish>,它將用於複製該提交。如果提交-ish 的格式為 #semver:<semver><semver> 可以是任何有效的 semver 範圍或精確版本,npm 將在遠程儲存庫中尋找與該範圍匹配的任何標籤或參照,就像它對註冊表依賴項所做的那樣。如果未指定 #<commit-ish>#semver:<semver>,則使用預設分支。

    與一般 git 依賴項一樣,如果套件在安裝完成前具有 prepare 腳本,則將會安裝 dependenciesdevDependencies

    範例

    npm install mygithubuser/myproject
    npm install github:mygithubuser/myproject
  • npm 安裝 gist:[<githubname>/]<gistID>[#<commit-ish>|#semver:<semver>]:

    嘗試使用 git 複製 https://gist.github.com/gistID 中的套件來安裝。與 gist 相關聯的 GitHub 使用者名稱為選用,且不會儲存在 package.json 中。

    與一般 git 依賴項一樣,如果套件在安裝完成前具有 prepare 腳本,則將會安裝 dependenciesdevDependencies

    範例

    npm install gist:101a11beef
  • npm 安裝 bitbucket:<bitbucketname>/<bitbucketrepo>[#<commit-ish>]:

    嘗試使用 git 複製 https://bitbucket.org/bitbucketname/bitbucketrepo 中的套件來安裝。

    如果提供 #<commit-ish>,將使用它來複製該提交。如果提交格式為 #semver:<semver><semver> 可以是任何有效的 semver 範圍或精確版本,且 npm 會在遠端儲存庫中尋找與該範圍相符的任何標籤或參照,就像它對登錄依賴項所做的一樣。如果未指定 #<commit-ish>#semver:<semver>,則使用 master

    與一般 git 依賴項一樣,如果套件在安裝完成前具有 prepare 腳本,則將會安裝 dependenciesdevDependencies

    範例

    npm install bitbucket:mybitbucketuser/myproject
  • npm 安裝 gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]:

    嘗試使用 git 複製 https://gitlab.com/gitlabname/gitlabrepo 中的套件來安裝。

    如果提供 #<commit-ish>,將使用它來複製該提交。如果提交格式為 #semver:<semver><semver> 可以是任何有效的 semver 範圍或精確版本,且 npm 會在遠端儲存庫中尋找與該範圍相符的任何標籤或參照,就像它對登錄依賴項所做的一樣。如果未指定 #<commit-ish>#semver:<semver>,則使用 master

    與一般 git 依賴項一樣,如果套件在安裝完成前具有 prepare 腳本,則將會安裝 dependenciesdevDependencies

    範例

    npm install gitlab:mygitlabuser/myproject
    npm install gitlab:myusr/myproj#semver:^5.0

您可以組合多個引數,甚至多種類型的引數。例如

npm install sax@">=0.1.0 <0.2.0" bench supervisor

--tag 引數將套用至所有指定的安裝目標。如果存在具有給定名稱的標籤,則標籤版本優先於較新版本。

--dry-run 引數將以一般方式報告安裝會執行哪些動作,但不會實際安裝任何內容。

--package-lock-only 引數只會更新 package-lock.json,而不是檢查 node_modules 和下載依賴項。

-f--force 引數將強制 npm 擷取遠端資源,即使磁碟上存在本機副本。

npm install sax --force

設定

請參閱 config 說明文件。許多設定參數會對安裝產生一些影響,因為這是 npm 所做的大部分工作。

以下是與安裝相關的一些最常見選項。

save

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

將已安裝套件儲存至 package.json 檔案中,作為依賴項。

npm rm 指令搭配使用時,會從 package.json 中移除依賴項。

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

save-exact

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

儲存在 package.json 的相依性會設定為確切版本,而不是使用 npm 預設的 semver 範圍運算子。

global

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

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

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

install-strategy

  • 預設值:「hoisted」
  • 類型:「hoisted」、「nested」、「shallow」或「linked」

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

legacy-bundling

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

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

global-style

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

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

omit

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

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

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

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

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

include

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

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

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

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

strict-peer-deps

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

如果設定為 true,且未設定 --legacy-peer-deps,則任何衝突的 peerDependencies 都會被視為安裝失敗,即使 npm 可以根據非對等依賴項關係合理猜測適當的解析方式。

預設情況下,依賴項圖表中深層的衝突 peerDependencies 將使用最近的非對等依賴項規範來解析,即使這樣做會導致某些套件接收超出其套件的 peerDependencies 物件中設定範圍的對等依賴項。

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

prefer-dedupe

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

如果可能,優先重複使用套件,而不是選擇較新的依賴項版本。

package-lock

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

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

package-lock-only

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

如果設定為 true,目前的作業只會使用 package-lock.json,忽略 node_modules

對於 update,這表示只會更新 package-lock.json,而不是檢查 node_modules 和下載依賴項。

對於 list,這表示輸出將基於 package-lock.json 所描述的樹狀結構,而不是 node_modules 的內容。

foreground-scripts

  • 預設值:false,除非使用 npm packnpm publish,預設值會變為 true
  • 類型:布林值

在前景程序中執行已安裝套件的所有建置指令碼(例如,preinstallinstallpostinstall),與主 npm 程序共用標準輸入、輸出和錯誤。

請注意,這通常會讓安裝執行速度變慢,而且會更吵,但對於除錯來說可能很有用。

ignore-scripts

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

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

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

audit

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

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

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

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

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

fund

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

當為「true」時,會在每次 npm install 結束時顯示訊息,確認尋找資金的相依項數量。請參閱 npm fund,了解詳細資訊。

dry-run

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

表示您不希望 npm 進行任何變更,它應該只回報它會做什麼。這可以傳遞給任何修改您當地安裝的命令,例如 installupdatededupeuninstall,以及 packpublish

注意:其他與網路相關的命令不會遵守這一點,例如 dist-tagsowner 等。

cpu

  • 預設值:null
  • 類型:null 或字串

覆寫要安裝的原生模組的 CPU 架構。可接受的值與 package.json 的 cpu 欄位相同,而後者來自 process.arch

os

  • 預設值:null
  • 類型:null 或字串

覆寫要安裝的原生模組的作業系統。可接受的值與 package.json 的 os 欄位相同,而後者來自 process.platform

libc

  • 預設值:null
  • 類型:null 或字串

覆寫要安裝的原生模組的 libc。可接受的值與 package.json 的 libc 欄位相同

workspace

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

在當前專案設定的工作空間背景下執行命令,同時透過僅執行此組態選項所定義的工作空間來進行篩選。

workspace 組態的有效值為

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

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

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

workspaces

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

設定為 true 以在所有設定的工作空間背景下執行命令。

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

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

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

include-workspace-root

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

在為命令啟用工作空間時,包含工作空間根目錄。

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

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

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

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

演算法

假設有 package{dep} 結構:A{B,C}, B{C}, C{D},npm 安裝演算法會產生

A
+-- B
+-- C
+-- D

也就是說,B 對 C 的相依項,是由於 A 已經在較高層級安裝了 C 而獲得滿足。D 仍安裝在頂層,因為沒有任何衝突。

對於 A{B,C}, B{C,D@1}, C{D@2},此演算法會產生

A
+-- B
+-- C
`-- D@2
+-- D@1

因為 B 的 D@1 將會安裝在頂層,因此 C 現在必須為自己私下安裝 D@2。此演算法是確定性的,但如果兩個相依項以不同的順序要求安裝,可能會產生不同的樹狀結構。

請參閱 資料夾,以取得 npm 建立的特定資料夾結構的詳細說明。

另請參閱