目錄
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.json 和 npm 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
時安裝dependencies
和devDependencies
中列出的所有模組,您可以使用--production=false
。注意:
--production
標記在將相依性新增到專案時沒有特別的意義。 -
npm install <folder>
:如果
<folder>
位於專案根目錄內,其相依性將會安裝,並可能提升到頂層node_modules
,就像其他類型的相依性一樣。如果<folder>
位於專案根目錄外,npm 將不會在<folder>
目錄中安裝套件相依性,但它會建立一個指向<folder>
的符號連結。注意:如果您想要安裝目錄的內容,就像從註冊表安裝套件一樣,而不是建立連結,您需要使用
--install-links
選項。範例
npm install ../../other-package --install-linksnpm install ./sub-package -
npm install <tarball 檔案>
:安裝位於檔案系統中的套件。注意:如果您只想將開發目錄連結到您的 npm 根目錄,您可以使用
npm link
輕鬆執行此操作。Tarball 需求
- 檔案名稱必須使用
.tar
、.tar.gz
或.tgz
作為副檔名。 - 套件內容應位於 tarball 內部的子資料夾中(通常稱為
package/
)。npm 在安裝套件時會移除一層目錄層級(相當於執行tar x --strip-components=1
)。 - 套件必須包含一個
package.json
檔案,其中包含name
和version
屬性。
範例
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 saxnpm 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.json
或package-lock.json
,它也會更新。<scope>
是選用的。套件將從與指定範圍關聯的登錄下載。如果沒有登錄與給定的範圍關聯,則假設為預設登錄。請參閱scope
。注意:如果您沒有在範圍名稱上包含 @ 符號,npm 會將其解釋為 GitHub 儲存庫,請參閱下方。範圍名稱也必須後面接斜線。
範例
npm install saxnpm install githubname/reponamenpm install @myorg/privatepackagenpm install node-tap --save-devnpm install dtrace-provider --save-optionalnpm install readable-stream --save-exactnpm install ansi-regex --save-bundle注意:如果在目前的作業目錄中有命名為
<name>
的檔案或資料夾,則它將嘗試安裝該檔案或資料夾,並且僅在它無效時才嘗試依名稱擷取套件。 -
-
npm install <alias>@npm:<name>
:在自訂別名下安裝套件。允許同名套件的多個版本並排存在,對於名稱較長的套件提供更方便的匯入名稱,以及使用 git 分支替換或分岔的 npm 套件作為替換。別名僅在您的專案中運作,而且不會重新命名傳遞依賴關係中的套件。別名應遵循
validate-npm-package-name
中所述的命名慣例。範例
npm install my-react@npm:reactnpm install jquery2@npm:jquery@2npm install jquery3@npm:jquery@3npm install npa@npm:npm-package-arg -
npm install [<@scope>/]<name>@<tag>
:安裝由指定標籤引用的套件版本。如果標籤不存在於該套件的登錄資料中,則此操作將會失敗。
範例
npm install sax@latestnpm install @myorg/mypackage@latest -
npm install [<@scope>/]<name>@<version>
:安裝指定的套件版本。如果版本尚未發佈到登錄,則此操作將會失敗。
範例
npm install sax@0.1.1npm 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>
是git
、git+ssh
、git+http
、git+https
或git+file
之一。如果提供了
#<commit-ish>
,它將用於複製該提交。如果提交-ish 的格式為#semver:<semver>
,<semver>
可以是任何有效的 semver 範圍或精確版本,npm 將在遠程儲存庫中尋找與該範圍匹配的任何標籤或參照,就像它對註冊表依賴項所做的那樣。如果未指定#<commit-ish>
或#semver:<semver>
,則使用儲存庫的預設分支。如果儲存庫使用子模組,這些子模組也會被複製。
如果正在安裝的套件包含
prepare
腳本,則其dependencies
和devDependencies
將會被安裝,並且在套件封裝並安裝之前,將會執行 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.27npm install git+ssh://git@github.com:npm/cli#pull/273npm install git+ssh://git@github.com:npm/cli#semver:^5.0npm install git+https://isaacs@github.com/npm/cli.gitnpm install git://github.com/npm/cli.git#v1.0.27GIT_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
腳本,則將會安裝dependencies
和devDependencies
。範例
npm install mygithubuser/myprojectnpm install github:mygithubuser/myproject -
npm 安裝 gist:[<githubname>/]<gistID>[#<commit-ish>|#semver:<semver>]
:嘗試使用
git
複製https://gist.github.com/gistID
中的套件來安裝。與 gist 相關聯的 GitHub 使用者名稱為選用,且不會儲存在package.json
中。與一般 git 依賴項一樣,如果套件在安裝完成前具有
prepare
腳本,則將會安裝dependencies
和devDependencies
。範例
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
腳本,則將會安裝dependencies
和devDependencies
。範例
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
腳本,則將會安裝dependencies
和devDependencies
。範例
npm install gitlab:mygitlabuser/myprojectnpm 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.json
或 npm-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 pack
或npm publish
,預設值會變為true
- 類型:布林值
在前景程序中執行已安裝套件的所有建置指令碼(例如,preinstall
、install
和 postinstall
),與主 npm 程序共用標準輸入、輸出和錯誤。
請注意,這通常會讓安裝執行速度變慢,而且會更吵,但對於除錯來說可能很有用。
ignore-scripts
- 預設值:false
- 類型:布林值
如果為 true,npm 就不會執行 package.json 檔案中指定的指令碼。
請注意,明確用來執行特定指令碼的命令,例如 npm start
、npm stop
、npm restart
、npm test
和 npm run-script
,如果設定了 ignore-scripts
,仍會執行它們預期的指令碼,但它們不會執行任何前置或後置指令碼。
audit
- 預設值:true
- 類型:布林值
當為「true」時,會將稽核報告與目前的 npm 命令一起提交到預設登錄和所有為範圍設定的登錄。請參閱 npm audit
文件,了解已提交的詳細資訊。
bin-links
- 預設值:true
- 類型:布林值
指示 npm 為套件可執行檔建立符號連結(或在 Windows 上建立 .cmd
shim)。
設定為 false 以不執行此動作。這可用於解決某些檔案系統不支援符號連結的事實,即使在表面上是 Unix 系統也是如此。
fund
- 預設值:true
- 類型:布林值
當為「true」時,會在每次 npm install
結束時顯示訊息,確認尋找資金的相依項數量。請參閱 npm fund
,了解詳細資訊。
dry-run
- 預設值:false
- 類型:布林值
表示您不希望 npm 進行任何變更,它應該只回報它會做什麼。這可以傳遞給任何修改您當地安裝的命令,例如 install
、update
、dedupe
、uninstall
,以及 pack
和 publish
。
注意:其他與網路相關的命令不會遵守這一點,例如 dist-tags
、owner
等。
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 僅在指定的工作區上執行,而不在根目錄專案上執行。
此值不會匯出至子程式的環境。
install-links
- 預設值: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 建立的特定資料夾結構的詳細說明。
另請參閱
- npm 資料夾
- npm update
- npm audit
- npm fund
- npm link
- npm rebuild
- npm 腳本
- npm config
- npmrc
- npm 登錄
- npm dist-tag
- npm uninstall
- npm shrinkwrap
- package.json
- workspaces