npm install命令(翻譯)


npm install

概要:

npm install (with no args, in package dir)
npm install [<@scope>/]<name>
npm install [<@scope>/]<name>@<tag>
npm install [<@scope>/]<name>@<version>
npm install [<@scope>/]<name>@<version range>
npm install <alias>@npm:<name>
npm install <git-host>:<git-user>/<repo-name>
npm install <git repo url>
npm install <tarball file>
npm install <tarball url>
npm install <folder>

aliases: npm i, npm add
common options: [-P|--save-prod|-D|--save-dev|-O|--save-optional] [-E|--save-exact] [-B|--save-bundle] [--no-save] [--dry-run]

描述

此命令將安裝軟件包及其依賴的任何軟件包。如果程序包中有 package-lockshrinkwrap(收縮包裝) 文件,則依賴項的安裝將由該程序驅動,如果兩個文件都存在,則以npm-shrinkwrap.json為准。請參閱package-lock.json和npm收縮包裝。

一個包是:

  • a) 包含package.json文件描述的程序的文件夾
  • b) 包含package.json文件描述的壓縮包
  • c) 解析為(b)的網址
  • d) 在(c)的注冊表中發布的<name> @ <version>(see registry)
  • e) 指向(d)的 <name>@<tag>(see npm dist-tag
  • f) 具有滿足(e)以下條件的“latest”標簽的<name>
  • g) 解析為(a)的<git remote url>

即使您從未發布過軟件包,如果您只想編寫一個節點程序(a),或者如果您還希望能夠在打包后將其輕松安裝到其他地方,使用npm仍然可以獲得很多好處。放入壓縮檔(b)。

 

* 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。

* npm install <tarball file>:

安裝位於文件系統上的軟件包。注意:如果僅要將dev目錄鏈接到npm根目錄,則可以使用npm link來更輕松地完成此操作。

Tarball要求:

  • 文件名必須使用.tar,.tar.gz或.tgz作為擴展名。
  • 軟件包內容應駐留在tarball的子文件夾中(通常稱為package/)。 npm在安裝軟件包時會剝離一個目錄層(運行tar x --strip-components = 1等效)。
  • 該軟件包必須包含具有名稱和版本屬性的package.json文件。

Example:

  npm install ./package.tgz

* npm install <tarall url>:

提取tarball網址,然后安裝它。為了區分此選項和其他選項,參數必須以“ http://”或“ https://”開頭

Example:

   npm install https://github.com/indexzero/forever/tarball/v0.5.6

* npm install [<@scope>/]<name>

執行<name>@<tag>安裝,其中<tag>是“ tag”配置。(請參閱配置。配置的默認值為latest。)

在大多數情況下,這將在npm注冊表上安裝標記為最新的模塊版本。

Example:

   npm install sax

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

在自定義別名下安裝軟件包。允許並排使用多個版本的同名程序包,對於其他名稱較長的程序包,則可以使用更方便的導入名稱,並使用git fork替換或派生的npm程序包作為替換。別名僅在您的項目上起作用,並且不會在傳遞性依賴項中重命名程序包。別名應遵循validate-npm-package-name中規定的命名約定。

Examples:

  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 默認情況下將所有指定的包保存到依賴項中。此外,您可以使用一些其他標志來控制在何處以及如何保存它們:

  • -P,--save-prod:包將出現在您的依賴項中。除非存在-D或-O,否則這是默認設置。
  • -D,--save-dev:包將出現在您的devDependencies中。
  • -O,--save-optional:包將出現在您的optionalDependencies中。
  • --no-save:防止保存到依賴項。

使用上述任何選項將依賴項保存到package.json時,還有兩個附加的可選標志:

  • -E, --save-exact:保存的依賴項將配置為確切的版本,而不是使用npm的默認semver range運算符。
  • -B, --save-bundle:保存的依賴項也將添加到您的bundleDependencies列表中。

此外,如果您有npm-shrinkwrap.jsonpackage-lock.json,則也會對其進行更新。

<scope>是可選的。該包將從與指定范圍關聯的注冊表中下載。如果沒有注冊表與給定范圍相關聯,則采用默認注冊表。請參閱范圍

注意:如果您的作用域名稱上未包含@ -symbol,則npm會將其解釋為GitHub存儲庫,請參見下文。范圍名稱也必須后面加上斜杠。

Examples:

  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 [<@scope>/]<name>@<tag>

安裝指定標簽引用的軟件包的版本。如果該程序包的注冊表數據中不存在該標記,則此操作將失敗。

Example:

    npm install sax@latest
    npm install @myorg/mypackage@latest

* npm install [<@scope>/]<name>@<version>

安裝指定版本的軟件包。如果該版本尚未發布到注冊表,則將失敗。

Example:

    npm install sax@0.1.1
    npm install @myorg/privatepackage@1.5.0

* npm install [<@scope>/]<name>@<version range>

安裝與指定版本范圍匹配的軟件包版本。這將遵循相同的規則來解決package.json中描述的依賴項。

請注意,大多數版本范圍必須用引號引起來,以便您的外殼將其視為單個參數。

Example:

    npm install sax@">=0.1.0 \<0.2.0"
    npm install @myorg/privatepackage@">=0.1.0 \<0.2.0"

* 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, or git+file.

如果提供了 #<commit-ish>,它將用於精確克隆該提交。如果commit-ish的格式為#semver:<semver>,則<semver>可以是任何有效的semver范圍或確切版本,並且npm會在遠程存儲庫中查找與該范圍匹配的任何標記或引用。注冊表依賴項。如果未指定#<commit-ish>#semver:<semver>,則使用存儲庫的默認分支。

如果存儲庫使用了子模塊,那么這些子模塊也將被克隆。

如果要安裝的軟件包包含prepare腳本,則在打包和安裝軟件包之前,將安裝其dependenciesdevDependencies,並運行prepare腳本。

以下git環境變量被npm識別,並在運行git時添加到環境中:

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

有關詳細信息,請參見git手冊頁。

Examples:

  npm install git+ssh://git@github.com:npm/cli.git#v1.0.27
  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>,它將用於精確克隆該提交。如果commit-ish的格式為#semver:<semver>,則<semver>可以是任何有效的semver范圍或確切版本,然后npm會在遠程存儲庫中查找與該范圍匹配的任何標記或引用,就像對注冊表依賴項一樣。如果未指定 #<commit-ish>or#semver:<semver>,則使用master

與常規git依賴項一樣,如果軟件包具有prepare腳本,則將在軟件包完成安裝之前安裝dependenciesdevDependencies

Examples:

    npm install mygithubuser/myproject
    npm install github:mygithubuser/myproject

* npm install gist:[<githubname>/]<gistID>[#<commit-iash>|#semver:<semver>]

通過嘗試使用git克隆軟件包,將其安裝在https://gist.github.com/gistID上。與要點關聯的GitHub用戶名是可選的,不會保存在package.json中。

與常規git依賴項一樣,如果軟件包具有prepare腳本,則將在軟件包完成安裝之前安裝dependenciesdevDependencies

Example:

    npm install gist:101a11beef

* npm install bitbucket:<bitbucketname>/<bitbucketrepo>[#<commit-ish>]

通過嘗試使用git克隆軟件包,將其安裝在https://bitbucket.org/bitbucketname/bitbucketrepo上。

如果提供了#<commit-ish>,它將用於精確克隆該提交。如果commit-ish的格式為#semver:<semver>,則<semver>可以是任何有效的semver范圍或確切版本,並且npm會在遠程存儲庫中查找與該范圍匹配的任何標記或引用。注冊表依賴項。如果未指定#<commit-ish>#semver:<semver>,則使用master

與常規git依賴項一樣,如果軟件包具有prepare腳本,則將在軟件包完成安裝之前安裝dependenciesdevDependencies

Example:

    npm install bitbucket:mybitbucketuser/myproject

* npm install gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]

通過嘗試使用git克隆軟件包,將其安裝在https://gitlab.com/gitlabname/gitlabrepo上。

如果提供了#<commit-ish>,它將用於精確克隆該提交。如果commit-ish的格式為#semver:<semver>,則<semver>可以是任何有效的semver范圍或確切版本,並且npm會在遠程存儲庫中查找與該范圍匹配的任何標記或引用。注冊表依賴項。如果未指定#<commit-ish>#semver:<semver>,則使用master

與常規git依賴項一樣,如果軟件包具有prepare腳本,則將在軟件包完成安裝之前安裝dependenciesdevDependencies

Example:

    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

--no-fund參數將隱藏每次安裝結束時顯示的消息,該消息確認正在尋找資金的依賴項的數量。見 npm-fund

-g或--global參數將使npm在全局而非本地安裝軟件包。See folders.

--global-style參數將使npm以與全局node_modules文件夾相同的布局將軟件包安裝到本地node_modules文件夾中。只有直接依賴項將顯示在node_modules中,而它們依賴的所有內容都將在其node_modules文件夾中展平。顯然,這將消除一些重復數據刪除。

--ignore-scripts參數將導致npm不執行package.json中定義的任何腳本。See scripts

--legacy-bundling參數將導致npm安裝該軟件包,以使1.4之前的npm版本(例如節點0.8附帶的版本)可以安裝該軟件包。這消除了所有自動重復數據刪除。

--link參數將導致npm在某些情況下將全局安裝鏈接到本地空間。

--no-bin-links參數將阻止npm為軟件包可能包含的任何二進制文件創建符號鏈接。

--no-optional參數將防止安裝可選依賴項。

--no-shrinkwrap參數,它將忽略可用的軟件包鎖定或收縮包裝文件,而改用package.json。

> shrinkwrap(收縮包裝)

 

--no-package-lock參數將阻止npm創建package-lock.json文件。在禁用包鎖的情況下運行時,npm不會在安裝時自動修剪節點模塊。

--nodedir = /path/to/node/source 參數將允許npm查找節點源代碼,以便npm可以編譯本機模塊。

--only={prod[uction]|dev[elopment]}參數將導致僅安裝devDependencies或僅安裝非devDependencies,而與NODE_ENV無關。

--no-audit參數可用於禁用將審核報告發送到已配置的注冊表。有關發送內容的詳細信息,請參見npm-audit

See config. 許多配置參數都會對安裝產生影響,因為這是npm的大部分工作。

Algorthm(算法)

要安裝軟件包,npm使用以下算法:

從磁盤加載現有的node_modules樹
克隆樹
獲取package.json和分類的元數據並將其添加到克隆中
遍歷克隆並添加任何缺少的依賴項
	依賴項將盡可能靠近頂部添加
	不破壞任何其他模塊
比較原始樹和克隆樹,並列出
將一個轉換為另一個要采取的措施
執行所有動作,最深的優先
	各種操作包括安裝,更新,刪除和移動

對於此 package{dep} 結構:A {B,C},B {C},C {D},該算法產生:

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

即,通過A已經使C被安裝在更高級別的事實,滿足了從B到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將拒絕安裝與當前軟件包名稱相同的任何軟件包。可以使用--force標志將其覆蓋,但是在大多數情況下,可以通過更改本地軟件包名稱來解決。

在一些非常罕見的病理性極端情況下,循環可能導致npm嘗試安裝永無休止的軟件包樹。這是最簡單的情況:

  A -> B -> A' -> B' -> A -> B -> A' -> B' -> A -> ...

其中A是軟件包的某個版本,而A'是同一軟件包的其他版本。因為B依賴於A的版本不同於樹中已有的版本,所以它必須安裝單獨的副本。A'也必須安裝B'。由於B'依賴於已被覆蓋的A的原始版本,因此循環陷入無限回歸。

為了避免這種情況,npm flat-out拒絕安裝軟件包文件夾祖先樹中任何位置已經存在的任何name@version。一個更正確但更復雜的解決方案是將現有版本符號鏈接到新位置。如果這影響了實際用例,將對其進行調查。

 

 

原文:https://docs.npmjs.com/cli-commands/install.html

 


免責聲明!

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



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