npmインストールと更新-違いは何ですか?


回答:


655

package.jsonで指定されたパッケージバージョンのnpm installnpm updateの処理の違い:

{
  "name":          "my-project",
  "version":       "1.0",                             // install   update
  "dependencies":  {                                  // ------------------
    "already-installed-versionless-module":  "*",     // ignores   "1.0" -> "1.1"
    "already-installed-semver-module":       "^1.4.3" // ignores   "1.4.3" -> "1.5.2"
    "already-installed-versioned-module":    "3.4.1"  // ignores   ignores
    "not-yet-installed-versionless-module":  "*",     // installs  installs
    "not-yet-installed-semver-module":       "^4.2.1" // installs  installs
    "not-yet-installed-versioned-module":    "2.7.8"  // installs  installs
  }
}

要約:唯一の大きな違いは、ファジーバージョン管理を使用して既にインストールされているモジュールが ...

  • 無視される npm install
  • によって更新されます npm update

さらにinstallupdate、デフォルトのハンドルdevDependenciesによって異なり

  • npm installフラグが追加されない限り、devDependencies をインストール/更新します--production
  • npm updateフラグが追加されない限り、devDependencies を無視します--dev

なぜ使用npm installするのですか?

npm install依存関係を処理する以外にも、さまざまなことを行うからpackage.jsonです。npm installで確認できるように、次のことができます...

  • ノードモジュールを手動でインストールする
  • 次のコマンドを使用して、グローバルに設定します(これにより、シェルに配置されますPATH)。npm install -g <name>
  • gitタグで記述された特定のバージョンをインストールする
  • git urlからインストールする
  • で再インストールを強制する --force

20
そして、どう~1.3ですか?
Offirmo 2014

6
バージョンが^ 5.0.9の場合はどうなりますか?npm install --save somePackage*依存関係に*を保存することは可能ですか?
KwiZ 2015

5
postinstallインストール時に実行するようなスクリプトは更新時にではないことにも注意します。
Michael Marvick

2
で指定されているgit URL、gitタグなどinstallupdate動作が異なるpackage.json場合は、これらのケースを例に追加すると便利です。
joeytwiddle

2
@Offirmoファジーバージョン管理のチルダは、「このパッケージの最新のマイナー(バグ修正)リリースに更新する」ことを意味します。マイナーバージョンは、バージョンの最後の番号です。つまり、1.3.0 -> 1.3.1これはに似て^1.3.0^ますが、メジャーバージョンを更新します1.3.0 -> 1.4.0
Boyan Kushlev 2017年

82

npm installは、package.jsonファイルにリストされているすべてのモジュールとその依存関係をインストールします。

npm updateは、node_modulesディレクトリ内のすべてのパッケージとその依存関係を更新します。

npm install expressは、expressモジュールとその依存関係のみをインストールします。

npm update expressは expressモジュールを更新します(npm@2.x以降、依存関係は更新されません)。

したがって、更新は、すでにモジュールがあり、新しいバージョンを取得したい場合のためのものです。


5
package.jsonファイルで特定のバージョンを指定しない場合、npm installはモジュールの最新バージョンを取得します。これは一種のアップデートです。
2012

11
だから私は何を使うべきですか、npm installそれともnpm update?または、言い換えれば、私は現在使用npm installしていますが、更新も行っているようですが、なぜ使用する必要があるのnpm updateですか?
Borek Bernard

4
つまりupdate、package.jsonに関係なく、常に最新バージョンに更新されますが、package.jsonでinstall指定されたバージョンは尊重されますか?
Borek Bernard

1
updateモジュールの最新バージョンをインストール(または更新)します。install提示されていない場合は最新バージョンのモジュールをインストールし、それ以外の場合は現在のバージョンを維持します。
tenphi

11
@Borek npm updateは、パッケージに関係なく、package.jsonに基づいて最新バージョンに更新されます。「express」:「3.x」を使用していて、バージョン3.1.0を使用している場合は、最新の3.xタグに更新されます。4.xバージョンがある場合、最新のバージョンはインストールされません。
gcochard 2014

47

ほとんどの場合、これはnpmで公開されているモジュールの最新バージョンをインストールします。

npm install express --save

モジュールを最新バージョンにアップグレードするためのより良い:

npm install express@latest --save --force

--save:パッケージが依存関係に表示されます。

詳細:npm-install


11
npm install express@latest --save --forceまさに私が欲しかったものでした。
ThomasReggi

2
ほとんどの場合?他のケースは?
Dmitri Zaitsev 2015

9

多くの違いがすでに言及されています。ここにもう一つあります:

実行npm installあなたのソースディレクトリの最上部には、さまざまなスクリプトを実行します:prepublishpreinstallinstallpostinstall。これらのスクリプトの機能によっては、npm install依存関係をインストールするだけの場合よりもかなり多くの作業を行う場合があります。

prepublishが呼び出すユースケースがmakeありましたMakefileが、package.json更新された場合に依存関係をフェッチするように設計されました npm install内から呼び出すMakefileと、無限再帰が発生しますが、呼び出しnpm updateは正常に機能し、すべての依存関係をインストールして、make直接呼び出された場合でもビルドを続行できるようにします。


1
一つの含意は、インスタンス、あなたのために、更新された場合ということでredis、モジュール、およびother_module以前のバージョンを必要としredisnpm install other_moduleそれを保証するother_module古いバージョンを使用します。other_module/node_modules/redis必要に応じて追加します。
jlukanta

4

npm update:インストールし、package.jsonにある最新のノードモジュールで更新

npm install:package.jsonで定義されているノードモジュールをインストールします(更新なし)


npmバージョン6.9.0を使用すると、次の動作npm updateが見られpackage-lock.jsonます。では、多数の依存関係が省略されます。必要なすべてのパッケージを利用可能にpackage-lock.jsonして正確にするには、常にnpm install直後に実行する必要がありますnpm update
Manfred
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.