Articles

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
    package.json

  • c) (b)に解決するURL
  • d) レジストリで公開されている<name>@<version>registry参照)で (c)
  • e) (d)
  • f) <name><name>@<tag>npm dist-tagを参照)。
  • g) (a)を解決する <git remote url>

たとえあなたがパッケージを公開しなかったとしても。 単に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.6
  • npm install <name> となります。

    <name>@<tag><tag>を「タグ」の設定とします。 (Seeconfig.

    ほとんどの場合、latestとタグ付けされたモジュールのバージョンが、npmレジストリにインストールされます。

    例:

    npm install sax

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

    カスタムエイリアスでパッケージをインストールします。 同じ名前のパッケージの複数のバージョンを並べることができ、長いインポート名を持つパッケージのインポート名をより便利にし、git forksの代替品やforked 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` は、指定されたパッケージをデフォルトで `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のリポジトリと解釈しますので、以下を参照してください。 スコープ名
    の後にもスラッシュをつけなければなりません。
    例を示します。
    ``bash
    npm install sax
    npm install githubname/reponame
    npm install @myorg/privatepackage
    npm install node-。tap -savedev
    npm install dtrace-provider --save-optional
    npm install readable-stream --save-。exact
    npm install ansi-regex --save-bundle
    ``
    **注意**です。 現在の
    <name>`という名前のファイルやフォルダがあれば、それをインストールしようとし、パッケージの名前が有効でない場合にのみ
    パッケージを取得しようとするでしょう。
    • npm install <name>@<tag>:

      指定したタグで参照されているバージョンのパッケージをインストールします。そのパッケージのレジストリデータにタグが存在しない場合は、失敗します。

      例を示します。

      npm install sax@latest
      npm 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.27
        npm install git+ssh://[email protected]:npm/cli#semver:^5.0
        npm install git+https://[email protected]/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://[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/myproject
      npm 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/myproject
      npm 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
    +-- C
    div C
    `-- D@2
    +-- D@1

    Bの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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です