npm-install
あらすじ
npm install (with no args. in package dir,npm install <name>npm install <name><tag>npm install <name><version>npm install <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共通のオプションです。
説明
このコマンドは、パッケージと、そのパッケージが依存しているパッケージをインストールします。 パッケージに package-lock または shrinkwrap ファイルがある場合、依存関係のインストールはそのファイルによって行われ、両方のファイルが存在する場合は npm-shrinkwrap.json が優先されます。 package-lock.jsonとnpm shrinkwrapを参照してください。
は、次のようになります。
- a)
package.jsonファイルで記述されたプログラムを含むフォルダー - b) (a)を含むgzip形式のtarball
- c) (a)を含むURL
- c) (b)に解決するURL
- d) レジストリで公開されている
<name>@<version>registry参照)で (c) - e) (d)
- f)
<name><name>@<tag>npm dist-tagを参照)。 - g) (a)を解決する
<git remote url>
package.json。
たとえあなたがパッケージを公開しなかったとしても。 単にnodeのプログラムを書きたいだけなら(a)、そしておそらくそれをtarballにまとめた後に他の場所に簡単にインストールできるようにしたいなら(b)、npmを使うことで多くのメリットを得ることができます。
-
npm install(in package directory, no arguments):ローカルのnode_modulesフォルダに依存パッケージをインストールします。
グローバル モード (コマンドに
-g--globalが付加されている状態) では、現在のパッケージ コンテキスト (つまり、現在の workingdirectory) をグローバル パッケージとしてインストールします。デフォルトでは、
npm installpackage.jsonの依存関係にあるすべてのモジュールをインストールします。--productionNODE_ENVproductiondevDependenciesNODE_ENVproductiondependenciesdevDependencies--production=falseを使用します。NOTE:
--productionフラグは、プロジェクトにアドペンデンシーを追加する際には特に意味を持ちません。 -
npm install <folder>:パッケージをシンボリックリンクとして現在のプロジェクトのディレクトリにインストールし、リンクされる前に依存関係がインストールされます。
<folder>node_modulesに引き上げられることがあります。 -
npm install <tarball file>:ファイルシステム上に存在するパッケージをインストールします。 注:devディレクトリをnpmルートにリンクさせたいだけなら、
npm linkを使用することでより簡単に行うことができます。Tarball requirements:
-
ファイル名には、
.tar.tar.gz.tgzのいずれかを拡張子として使用する必要があります。 -
パッケージの内容は、tarballの中のサブフォルダに格納されます(通常は
package/と呼ばれます)。 -
パッケージは、
package.jsonnameversionのプロパティを持たせる必要があります。例:
npm install ./package.tgz
-
-
npm install <tarball url>:tarballのURLを取得して、インストールします。 このオプションと他のオプションを区別するために、引数は「http://」または「https://」で始まる必要があります
例を示します。
npm install https://github.com/indexzero/forever/tarball/v0.5.6npm install <name>となります。<name>@<tag><tag>を「タグ」の設定とします。 (Seeconfig.ほとんどの場合、
latestとタグ付けされたモジュールのバージョンが、npmレジストリにインストールされます。例:
npm install saxnpm install <alias>@npm:<name>:カスタムエイリアスでパッケージをインストールします。 同じ名前のパッケージの複数のバージョンを並べることができ、長いインポート名を持つパッケージのインポート名をより便利にし、git forksの代替品やforked 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` は、指定されたパッケージをデフォルトで `dependencies` に保存します。さらに、いくつかの追加のフラグを使って、どこにどのように保存されるかをコントロールすることができます:* `-P, --save-prod`: パッケージは、あなたの `dependencies` に表示されます。* `-D, --save-dev`:* `-O, --save-optional`:* `--no-save`:上記のいずれかのオプションを使用して、依存関係を自分のpackage.jsonに保存する際には、次の2つの追加オプションを使用します。* `-E, --save-exact`: 保存された依存関係は、npmのデフォルトのsemver rangeを使用するのではなく、正確なバージョンで設定されます。さらに、`npm-shrinkwrap.json`や`package-lock.json`があれば、`npm-shrinkwrap.<scope>`はオプションです。 パッケージは、指定されたスコープに関連付けられたレジストリからダウンロードされます。 もし、指定されたスコープに関連するレジストリがない場合は、デフォルトのレジストリが使用されます。注意: スコープ名に@シンボルを含まない場合、npmは代わりにGitHubのリポジトリと解釈しますので、以下を参照してください。 スコープ名の後にもスラッシュをつけなければなりません。例を示します。``bashnpm install saxnpm install githubname/reponamenpm install @myorg/privatepackagenpm install node-。tap -savedevnpm install dtrace-provider --save-optionalnpm install readable-stream --save-。exactnpm install ansi-regex --save-bundle``**注意**です。 現在の<name>`という名前のファイルやフォルダがあれば、それをインストールしようとし、パッケージの名前が有効でない場合にのみパッケージを取得しようとするでしょう。-
npm install <name>@<tag>:指定したタグで参照されているバージョンのパッケージをインストールします。そのパッケージのレジストリデータにタグが存在しない場合は、失敗します。
例を示します。
npm install sax@latestnpm install @myorg/mypackage@latest -
npm install <name>@<version>となります。指定されたバージョンのパッケージをインストールします。 バージョンがレジストリに公開されていない場合は失敗します。
例です。
npm install [email protected]npm install @myorg/[email protected] -
npm install <name>@<version range>:指定されたバージョン範囲に一致するパッケージのバージョンをインストールします。
ほとんどのバージョン範囲は、シェルが1つの引数として扱うように、引用符で囲む必要があることに注意してください。
例:
npm install sax@"><0.2.0"npm install @myorg/privatepackage@"><0.2.0" -
npm install <git remote url>:ホストされた git プロバイダーからパッケージをインストールし、
gitでクローニングします。完全な git のリモート URL の場合は、その URL のみが試行されます。<protocol><hostname><path><protocol>gitgit+sshgit+httpgit+httpsgit+fileです。#<commit-ish>が提供された場合、まさにそのcommitをクローンするために使用されます。 コミットの形式が#semver:<semver><semver>には有効な semver の範囲や正確なバージョンを指定することができ、npm はレジストリの依存関係と同様に、その範囲に一致するタグや参照をリモートリポジトリから探します。#<commit-ish>#semver:<semver>も指定されていない場合は、リポジトリのデフォルトブランチが使用されます。リポジトリがサブモジュールを使用している場合は、それらのサブモジュールもクローンされます。
インストールされるパッケージに
preparedependenciesdevDependenciesがインストールされ、preparescript が実行されます。以下のgit環境変数はnpmで認識され、git実行時に環境に追加されます。
-
GIT_ASKPASS -
GIT_EXEC_PATH -
GIT_PROXY_COMMAND -
GIT_SSH -
GIT_SSH_COMMAND -
GIT_SSL_CAINFO -
GIT_SSL_NO_VERIFY詳細はgit manページをご覧ください。
例:
npm install git+ssh://[email protected]:npm/cli.git#v1.0.27npm install git+ssh://[email protected]:npm/cli#semver:^5.0npm install git+https://[email protected]/npm/cli.gitnpm install git://github.com/npm/cli.git#v1.0.27GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://[email protected]:npm/cli.git
-
-
npm install <githubname>/<githubrepo>: -
npm install github:<githubname>/<githubrepo>:https://github.com/githubname/githubrepogitを使ってcloneしようとしてインストールします。#<commit-ish>が提供されている場合は、まさにそのcommitをクローンするために使用されます。 コミットの形式が#semver:<semver><semver>には有効な semver の範囲や正確なバージョンを指定することができ、npm はレジストリの依存関係と同様に、その範囲に一致するタグや参照をリモートリポジトリから探します。#<commit-ish>#semver:<semver>masterが使用されます。通常のgit依存関係と同様に、
dependenciesdevDependenciesprepareスクリプトがある場合、パッケージのインストールが終わる前にインストールされます。例:
npm install mygithubuser/myprojectnpm install github:mygithubuser/myproject -
npm install gist:<gistID>:https://gist.github.com/gistIDgitを使ってtocloneしようとするとインストールされます。 gistに関連付けられたGitHubのユーザー名は任意であり、package.jsonには保存されません。通常の git の依存関係と同様に、
dependenciesdevDependenciesprepareスクリプトがある場合、パッケージのインストールが完了する前にインストールされます。例:
npm install gist: -
npm install bitbucket:<bitbucketname>/<bitbucketrepo>:https://bitbucket.org/bitbucketname/bitbucketrepogitを使ってcloneを試みてインストールします。#<commit-ish>が提供されている場合は、まさにそのcommitをクローンするために使用されます。 コミットの形式が#semver:<semver><semver>には有効な semver の範囲や正確なバージョンを指定することができ、npm はレジストリの依存関係と同様に、その範囲に一致するタグや参照をリモートリポジトリから探します。#<commit-ish>#semver:<semver>masterが使用されます。通常のgit依存関係と同様に、
dependenciesdevDependenciesprepareスクリプトがある場合、パッケージのインストールが終わる前にインストールされます。例:
npm install bitbucket:mybitbucketuser/myproject -
npm install gitlab:<gitlabname>/<gitlabrepo>:https://gitlab.com/gitlabname/gitlabrepogitを使ってcloneを試みてインストールします。#<commit-ish>が提供されている場合は、まさにそのcommitをクローンするために使用されます。 コミットの形式が#semver:<semver><semver>には有効な semver の範囲や正確なバージョンを指定することができ、npm はレジストリの依存関係と同様に、その範囲に一致するタグや参照をリモートリポジトリから探します。#<commit-ish>#semver:<semver>masterが使用されます。通常のgit依存関係と同様に、
dependenciesdevDependenciesprepareスクリプトがある場合、パッケージのインストールが終わる前にインストールされます。例:
npm install gitlab:mygitlabuser/myprojectnpm install gitlab:myusr/myproj#semver:^5.0
複数の引数を組み合わせたり、複数の種類の引数を組み合わせたりすることもできます。例えば:
npm install sax@"><0.2.0" bench supervisor--tag引数は、指定されたすべてのインストールターゲットに適用されます。--dry-run引数は、実際には何もインストールしなくても、通常の方法でインストールが何をしたかを報告します。--package-lock-onlypackage-lock.jsonnode_modulesをチェックして依存関係をダウンロードすることはありません。-f--forceの引数は、ディスク上にローカルコピーが存在していても、リモートリソースの取得を強制します。npm install sax --force--no-fund引数は、各インストールの最後に表示される、資金調達のために探している依存関係の数を認めるメッセージを非表示にします。npm-fund(1)-g--global引数は、npmがパッケージをローカルではなくグローバルにインストールするようにします。--global-style引数は、npmがパッケージをローカルのnode_modulesnode_modulesnode_modulesnode_modulesフォルダにフラット化されます。--ignore-scriptsの引数は、package.jsonで定義されたスクリプトをnpmが実行しないようにします。--legacy-bundling引数は、node 0.8に含まれるような1.4より前のバージョンのnpmがパッケージをインストールできるように、npmにパッケージをインストールさせます。--link引数は、npmがグローバルインストールをローカル空間にリンクする場合があります。--no-bin-links引数は、npmがパッケージに含まれる可能性のあるバイナリのシンボリックリンクを作成しないようにします。--no-optional引数は、オプションの依存関係がインストールされないようにします。--no-shrinkwrap引数は、availablepackage lock や shrinkwrap ファイルを無視して、package.json を代わりに使用します。jsonを代わりに使用します。引数は、npmが
package-lock.jsonファイルを作成しないようにします。--nodedir=/path/to/node/source引数は、npmがネイティブモジュールをコンパイルできるように、nodeのソースコードを見つけられるようにします。--only={prod|dev}devDependenciesdevDependenciesNODE_ENVに関係なくインストールされるようになります。--no-auditnpm-auditを参照してください。configを参照してください。 設定パラメータの多くは、インストールに影響を与えます。アルゴリズム
パッケージをインストールするために、npmは以下のアルゴリズムを使用します。
既存の node_modules ツリーをディスクから読み込むツリーをクローンするパッケージを取得します。クローンを歩き回り、不足している依存関係を追加します依存関係は可能な限りトップに近いところに追加されます他のモジュールを壊すことなく。 他のモジュールを壊さずに元のツリーとクローンされたツリーを比較し、一方を他方に変換するためのアクションのリストを作成しますアクションをすべて実行します。 最も深い最初の種類のアクションは、インストール、アップデート、削除、移動ですこの
package{dep}構造の場合。A{B,C}, B{C}, C{D}、このアルゴリズムは生成します。A+--。 B+-- C+-- Dつまり。 BからCへの依存関係は、AがすでにCを上位にインストールしたという事実によって満たされます。 D は何も衝突していないので、まだ最上位にインストールされています。
A{B,C}, B{C,D@1}, C{D@2}について、このアルゴリズムは次のようになります。A+-- B+-- Cdiv C`-- D@2+-- D@1BのD@1はトップレベルにインストールされるので、CはD@2をインストールしなければなりません。 Cは自分でD@2をプライベートにインストールする必要があります。
npmが作成する特定のフォルダ構造の詳細については、フォルダを参照してください。
Limitations of npm's Install Algorithm
npmは、現在のパッケージと同一の名前を持つパッケージのインストールを拒否します。 これは
--forceフラグで無効にすることができますが、ほとんどの場合、ローカル パッケージ名を変更することで対処できます。非常に稀で病的なエッジケースとして、サイクルによって npm がパッケージの終わりのないツリーをインストールしようとする場合があります。 ここでは、最も単純なケースを紹介します。
A -> B -> A' -> B' -div> A -> B -> A' -> B' -> A -> ...ここで、
AA'BAA'B'をインストールしなければなりません。このような状況を避けるために、npm は packagefolder の祖先のツリーのどこかに既に存在する
name@versionのインストールを完全に拒否します。 より正しく、しかしより複雑な解決策は、既存のバージョンを新しい場所にシンボリックリンクすることです。 これが実際の使用例に影響を与えることがあれば、調査します。関連項目
- npm folders
- npm update
- npm audit
- npm fund
- npm linkli
- npm rebuild
- npm scripts
- npm build
- npm config
- npmrc
- npm registry
- npm dist-。タグ
- npm uninstall
- npm shrinkwrap
- package.json