npm 安裝 install

2024-04-26 09:52 更新

安裝包

概要

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 <git-host>:<git-user>/<repo-name>
npm install <git repo url>
npm install <tarball file>
npm install <tarball url>
npm install <folder>


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

詳情

此命令安裝一個包,以及它所依賴的任何包。如果包具有包鎖,或npm shrinkwrap文件,或yarn lock文件,則依賴項的安裝將由該文件驅(qū)動,并遵循以下優(yōu)先順序:

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

請參考package-lock.jsonnpm shrinkwrap

一個package是:

  • a) 包含由package.json文件描述的程序的文件夾
  • b) 包含 (a) 的 gzip 壓縮包
  • c) 解析為 (b) 的網(wǎng)址
  • d) 與 (c) 一起在注冊表發(fā)布的<name>@<version>(參見npm-registry)。
  • e) 指向(d)的<name>@<tag>(請參考npm-dist-tag)。
  • f) 具有滿足 (e) 的lastest標(biāo)簽的<name>。
  • g) 解析為 (a)的<git remote url>。

即使你從來沒有發(fā)布過你的包,如果你只是想寫一個節(jié)點程序(a),或者如果你還希望打包成 tarball (b) 能夠輕松地安裝到其他地方,你仍然可以從使用 npm 中獲得很多好處。

  • npm install?(在包目錄中,沒有參數(shù)):
    在本地 node_modules 文件夾中安裝依賴項。
    在全局模式下(即使用-g--global附加到命令),它將當(dāng)前包上下文(即當(dāng)前工作目錄)安裝為全局包。
    默認情況下,npm install將安裝所有列為依賴項的模塊package.json。
    使用--production標(biāo)志(或當(dāng)NODE_ENV環(huán)境變量設(shè)置為production),npm 將不會安裝?devDependencies.
    注意:--production在向項目添加依賴項時,該標(biāo)志沒有特殊含義。
  • npm install <folder>: 將包安裝在目錄中作為當(dāng)前項目中的符號鏈接。它的依賴項將在鏈接之前安裝。如果<folder>位于項目的根目錄中,它的依賴項可能會node_modules像其他類型的依賴項一樣被提升到頂層。
  • npm install <tarball file>: 安裝位于文件系統(tǒng)上的軟件包。注意:如果你只想將 dev 目錄鏈接到你的 npm 根目錄,你可以使用npm link.
    壓縮包要求:
    • 文件名必須使用.tar,?.tar.gz, 或.tgz作為擴展名。
    • 包內(nèi)容應(yīng)位于 tarball 內(nèi)的子文件夾中(通常稱為package/)。npm 在安裝包時剝離一個目錄層(相當(dāng)于tar x --strip-components=1運行)。
    • 該包必須包含一個package.json具有nameversion屬性的文件。 例子:
      npm install ./package.tgz

  • npm install <tarball url>: 獲取 tarball url,然后安裝它。為了區(qū)分這個選項和其他選項,參數(shù)必須以http://https://開頭 例子:
    npm install https://github.com/indexzero/forever/tarball/v0.5.6

  • npm install [<@scope>/]<name>: 進行<name>@<tag>安裝,<tag>“標(biāo)簽”配置在哪里。(請參閱?[npm-config](https://www.npmjs.cn/misc/config)。配置的默認值為latest。)
    在大多數(shù)情況下,這將安裝latest在 npm 注冊表中標(biāo)記為的模塊版本?。
    例子:
    npm install sax

  • npm install``dependencies默認情況下將任何指定的包保存到。此外,您可以使用一些額外的標(biāo)志來控制它們的保存位置和方式:
    • -P, --save-prod: 包將出現(xiàn)在你的dependencies.?這是默認值,除非-D-O存在。
    • -D, --save-dev: 包將出現(xiàn)在你的devDependencies.
    • -O, --save-optional: 包將出現(xiàn)在你的optionalDependencies.
    • --no-save:防止保存到dependencies.

使用上述任何選項將依賴項保存到 package.json 時,還有兩個額外的可選標(biāo)志:

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

    此外,如果你有一個npm-shrinkwrap.jsonpackage-lock.json那么它也將被更新。
    <scope>是可選的。該包將從與指定范圍關(guān)聯(lián)的注冊表中下載。如果沒有注冊表與給定范圍相關(guān)聯(lián),則假定為默認注冊表。見npm-scope。
    注意:如果你沒有在范圍名稱中包含 @-symbol,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>當(dāng)前工作目錄中有一個文件或文件夾,那么它會嘗試安裝它,并且只有在它無效時才嘗試按名稱獲取包。

  • npm install [<@scope>/]<name>@<tag>: 安裝指定標(biāo)簽引用的包版本。如果該包的注冊表數(shù)據(jù)中不存在該標(biāo)記,則此操作將失敗。

例子:

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

  • npm install [<@scope>/]<name>@<version range>: 安裝與指定版本范圍匹配的軟件包版本。這將遵循解決依賴項中描述的相同規(guī)則package.json。 請注意,大多數(shù)版本范圍必須放在引號中,以便您的 shell 將其視為單個參數(shù)。
    例子:
    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+sshgit+http,git+https, 或?git+file。
    如果#<commit-ish>提供,它將用于準(zhǔn)確克隆該提交。如果 commit-ish 具有格式#semver:<semver>,<semver>可以是任何有效的 semver 范圍或確切版本,并且 npm 將在遠程存儲庫中查找與該范圍匹配的任何標(biāo)簽或引用,就像查找注冊表依賴項一樣。如果兩者都未指定#<commit-ish>或未#semver:<semver>指定,則使用存儲庫的默認分支。
    如果存儲庫使用子模塊,則這些子模塊也將被克隆。
    如果正在安裝的包包含prepare腳本,則在打包和安裝包之前dependencies,devDependencies將安裝其和腳本,?并運行準(zhǔn)備腳本。
    以下 git 環(huán)境變量被 npm 識別,并會在運行 git 時添加到環(huán)境中:

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

    有關(guān)詳細信息,請參閱 git 手冊頁。
    例子:

    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:n

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

  • npm install github:<githubname>/<githubrepo>[#<commit-ish>]: 在安裝該軟件包https://github.com/githubname/githubrepo通過嘗試使用克隆它git

如果#<commit-ish>提供,它將用于準(zhǔn)確克隆該提交。如果 commit-ish 具有格式#semver:<semver>,<semver>可以是任何有效的 semver 范圍或確切版本,并且 npm 將在遠程存儲庫中查找與該范圍匹配的任何標(biāo)簽或引用,就像查找注冊表依賴項一樣。如果兩者都未指定#<commit-ish>或未#semver:<semver>指定,則master使用。

與常規(guī)git的依賴,dependencies并且devDependencies將安裝如果包有一個prepare腳本,做包,然后再安裝。

例子:

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

  • npm install gist:[<githubname>/]<gistID>[#<commit-ish>|#semver:<semver>]: 在安裝該軟件包https://gist.github.com/gistID通過嘗試使用克隆它git。與要點關(guān)聯(lián)的 GitHub 用戶名是可選的,不會保存在package.json.

與常規(guī)git的依賴,dependencies并且devDependencies將安裝如果包有一個prepare腳本,做包,然后再安裝。

例子:

    npm install gist:101a11beef

  • npm install bitbucket:<bitbucketname>/<bitbucketrepo>[#<commit-ish>]: 在安裝該軟件包https://bitbucket.org/bitbucketname/bitbucketrepo?通過嘗試使用克隆它git。

如果#<commit-ish>提供,它將用于準(zhǔn)確克隆該提交。如果 commit-ish 具有格式#semver:<semver>,<semver>可以是任何有效的 semver 范圍或確切版本,并且 npm 將在遠程存儲庫中查找與該范圍匹配的任何標(biāo)簽或引用,就像查找注冊表依賴項一樣。如果兩者都未指定#<commit-ish>或未#semver:<semver>指定,則master使用。

與常規(guī)git的依賴,dependencies并且devDependencies將安裝如果包有一個prepare腳本,做包,然后再安裝。

例子:

    npm install bitbucket:mybitbucketuser/myproject

  • npm install gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]: 在安裝該軟件包https://gitlab.com/gitlabname/gitlabrepo?通過嘗試使用克隆它git

如果#<commit-ish>提供,它將用于準(zhǔn)確克隆該提交。如果 commit-ish 具有格式#semver:<semver>,<semver>可以是任何有效的 semver 范圍或確切版本,并且 npm 將在遠程存儲庫中查找與該范圍匹配的任何標(biāo)簽或引用,就像查找注冊表依賴項一樣。如果兩者都未指定#<commit-ish>或未#semver:<semver>指定,則master使用。

與常規(guī)git的依賴,dependencies并且devDependencies將安裝如果包有一個prepare腳本,做包,然后再安裝。

例子:

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

你可以組合多個參數(shù),甚至多種類型的參數(shù)。例如:

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

--tag參數(shù)將應(yīng)用于所有指定的安裝目標(biāo)。如果存在具有給定名稱的標(biāo)記,則標(biāo)記版本優(yōu)先于較新版本。

--dry-run參數(shù)將以通常的方式報告安裝會在沒有實際安裝任何東西的情況下完成的操作。

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

即使磁盤上存在本地副本,-for--force參數(shù)也會強制 npm 獲取遠程資源。

npm install sax --force

-g--global參數(shù)會導(dǎo)致NPM在全局范圍內(nèi),而不是在本地安裝包。見[npm-folders](https://www.npmjs.cn/files/folders)

--global-style參數(shù)將導(dǎo)致 npm 將包安裝到您的本地node_modules文件夾中,其布局與全局node_modules文件夾使用的布局相同。只有您的直接依賴項會顯示在其中,?node_modules并且它們所依賴的所有內(nèi)容都將在其node_modules文件夾中展平?。這顯然會消除一些重復(fù)數(shù)據(jù)刪除。

--ignore-scripts參數(shù)將導(dǎo)致 npm 不執(zhí)行 package.json 中定義的任何腳本。見[npm-scripts](https://www.npmjs.cn/misc/scripts)。

--legacy-bundling參數(shù)將導(dǎo)致 npm 安裝包,以便 1.4 之前的 npm 版本,例如 node 0.8 中包含的版本,可以安裝該包。這消除了所有自動重復(fù)數(shù)據(jù)刪除。 --link在某些情況下,該參數(shù)將導(dǎo)致 npm 將全局安裝鏈接到本地??空間。

--no-bin-links參數(shù)將阻止 npm 為包可能包含的任何二進制文件創(chuàng)建符號鏈接。

--no-optional參數(shù)將阻止安裝可選的依賴項。

--no-shrinkwrap參數(shù)將忽略可用的包鎖定或收縮包裝文件并使用 package.json 代替。

--no-package-lock參數(shù)將阻止 npm 創(chuàng)建?package-lock.json文件。當(dāng)使用 package-lock 的禁用 npm 運行時,安裝時不會自動修剪您的節(jié)點模塊。

--nodedir=/path/to/node/source參數(shù)將允許 npm 找到節(jié)點源代碼,以便 npm 可以編譯本機模塊。

所述--only={prod[uction]|dev[elopment]}參數(shù)將導(dǎo)致或者僅?devDependencies或僅非devDependencies不管要安裝NODE_ENV。

--no-audit參數(shù)可用于禁止向配置的注冊表發(fā)送審計報告。有關(guān)[npm-audit](https://www.npmjs.cn/cli/audit)發(fā)送內(nèi)容的詳細信息,請參閱。

[npm-config](https://www.npmjs.cn/misc/config)。許多配置參數(shù)對安裝有一些影響,因為這是 npm 所做的大部分工作。

配置

請參閱config幫助文檔。許多配置參數(shù)對安裝有一些影響,因為這是 npm 所做的大部分工作。

以下這些是與安裝相關(guān)的一些最常見的選項。

save 保存

  • 默認值:true
  • 類型:Boolean

布爾型將已安裝的包作為依賴項保存到 package.json 文件中。

npm rm命令一起使用時,從 package.json 中刪除依賴項。

save-exact 另存為

  • 默認值:false
  • 類型:true

保存到 package.json 的依賴項將使用確切的版本進行配置,而不是使用 npm 的默認 semver 范圍運算符。

global 全局

  • 默認值:false
  • 類型:Boolean

global模式下運行,以便將包安裝到prefix?文件夾而不是當(dāng)前工作目錄中。有關(guān)行為差異的更多信息,請參閱NPM 文件夾。

  • 軟件包安裝到{prefix}/lib/node_modules文件夾中,而不是當(dāng)前工作目錄中。
  • bin 文件鏈接到?{prefix}/bin
  • 手冊頁鏈接到?{prefix}/share/man

global-style 全局風(fēng)格

  • 默認值:false
  • 類型:Boolean

使 npm 以node_modules與全局node_modules文件夾相同的布局將包安裝到本地文件夾中。只有你的直接依賴項會顯示在其中,node_modules并且它們所依賴的所有內(nèi)容都將在其node_modules文件夾中展平。這顯然會消除一些重復(fù)數(shù)據(jù)刪除。如果與 一起使用legacy-bundling,legacy-bundling?將是首選。

legacy-bundling 繼承捆綁

  • 默認值:false
  • 類型:Boolean

使 npm 安裝包,以便 1.4 之前的 npm 版本,例如 node 0.8 中包含的版本,可以安裝該包。這消除了所有自動重復(fù)數(shù)據(jù)刪除。如果與global-style此選項一起使用將是首選。

strict-peer-deps 嚴(yán)格對等依賴

  • 默認值:false
  • 類型:Boolean

如果設(shè)置為true,并且--legacy-peer-deps未設(shè)置,則任何沖突peerDependencies都將被視為安裝失敗,即使 npm 可以根據(jù)非對等依賴關(guān)系合理猜測適當(dāng)?shù)慕鉀Q方案。

默認情況下,peerDependencies依賴關(guān)系圖中的深層沖突將使用最近的非對等依賴項規(guī)范來解決,即使這樣做會導(dǎo)致某些包接收在其包peerDependencies對象中設(shè)置的范圍之外的對等依賴項。

當(dāng)執(zhí)行此類和覆蓋時,會打印警告,解釋沖突和所涉及的包。如果--strict-peer-deps設(shè)置,則此警告被視為失敗。

package-lock 包鎖

  • 默認值:true
  • 類型:Boolean

如果設(shè)置為 falsepackage-lock.json在安裝時忽略文件。如果savetrue,將組織編寫package-lock.json。

當(dāng)包鎖被禁用時,無關(guān)模塊的自動修剪也將被禁用。要刪除禁用包鎖的無關(guān)模塊,請使用npm prune.

omit 省略

  • 默認值:如果NODE_ENV環(huán)境變量設(shè)置為 'production',則為'dev?',否則為null。
  • 類型:dev、optionalpeer(可多次設(shè)置)

要從磁盤上的安裝樹中省略的依賴項類型。

請注意,這些依賴的仍然解決,加入?package-lock.jsonnpm-shrinkwrap.json文件。它們只是沒有物理安裝在磁盤上。

如果包類型同時出現(xiàn)在--include--omit列表中,則它將被包括在內(nèi)。

如果生成的省略列表包含'dev',則NODE_ENV環(huán)境變量將被設(shè)置'production'為所有生命周期腳本。

ignore-scripts 忽略腳本

  • 默認值:false
  • 類型:Boolean

如果為true,則 npm 不會運行 package.json 文件中指定的腳本。

請注意,明確用于運行特定腳本的命令,例如?npm start,?npm stop,?npm restart,?npm test, 并且npm run-script?如果ignore-scripts已設(shè)置仍將運行其預(yù)期腳本,但它們不會運行任何前置或后置腳本。

audit 審計

  • 默認值:true
  • 類型:Boolean

當(dāng)為true時,將審計報告與當(dāng)前 npm 命令一起提交到默認注冊表和為范圍配置的所有注冊表。

bin-links

  • 默認值:true
  • 類型:Boolean

告訴 npm 為包可執(zhí)行文件創(chuàng)建符號鏈接(或Windows上的.cmd墊片)。

設(shè)置為 false 使其不這樣做。這可以用來解決一些文件系統(tǒng)不支持符號鏈接的事實,即使在表面上是 Unix 系統(tǒng)上。

fund 資金

  • 默認值:true
  • 類型:Boolean

當(dāng)為true,在每個結(jié)尾處顯示消息時,npm install?確認正在尋找資金的依賴項的數(shù)量。

dry-run 試運行

  • 默認值:false
  • 類型:Boolean

表示你不希望 npm 進行任何更改并且它應(yīng)該只報告它會做的事情。這可以被傳遞到任何修改本地安裝,例如,命令的install,update,?dedupeuninstall,以及packpublish。 注意:這不是由其他網(wǎng)絡(luò)相關(guān)的命令,如兌現(xiàn)dist-tags,?owner等等。

workspace 工作區(qū)

  • 默認:
  • 類型:String(可多次設(shè)置)

允許在當(dāng)前項目的已配置工作區(qū)的上下文中運行命令,同時通過僅運行此配置選項定義的工作區(qū)進行過濾。

workspace配置的有效值為:

  • 工作區(qū)名稱
  • 工作區(qū)目錄的路徑
  • 父工作區(qū)目錄的路徑(將導(dǎo)致選擇所有嵌套工作區(qū))

npm init命令設(shè)置時,可以將其設(shè)置為尚不存在的工作區(qū)的文件夾,以創(chuàng)建該文件夾并將其設(shè)置為項目中的全新工作區(qū)。

此值不會導(dǎo)出到子進程的環(huán)境中。

workspaces 工作區(qū)

  • 默認值:false
  • 類型:Boolean

啟用在所有已配置工作區(qū)的上下文中運行命令。

此值不會導(dǎo)出到子進程的環(huán)境中。

算法

給定一個package{dep}結(jié)構(gòu):A{B,C}, B{C}, C{D},這個算法產(chǎn)生:

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

也就是說,從 BC 的依賴關(guān)系由 A 已經(jīng)導(dǎo)致 C 安裝在更高級別的事實得到滿足。D 仍然安裝在頂層,因為沒有與它沖突。

對于A{B,C}, B{C,D@1}, C{D@2},該算法產(chǎn)生:

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

由于 BD@1 將安裝在頂層,所以 C 現(xiàn)在必須為自己私下安裝 D@2。該算法是確定性的,但如果以不同的順序請求安裝兩個依賴項,則可能會生成不同的樹。

有關(guān)npm 創(chuàng)建的特定文件夾結(jié)構(gòu)的更詳細說明,請參閱npm-folders。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號