npm install vs. update - was ist der Unterschied?


519

Was ist der praktische Unterschied zwischen npm installund npm update? Wann soll ich welche verwenden?

Antworten:


654

Der Unterschied zwischen der npm-Installation und der npm-Update- Behandlung der in package.json angegebenen Paketversionen :

{
  "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
  }
}

Zusammenfassung : Der einzige große Unterschied besteht darin, dass ein bereits installiertes Modul mit Fuzzy-Versionierung ...

  • wird von ignoriert npm install
  • wird aktualisiert von npm update

Zusätzlich : installund updatebehandeln devDependencies standardmäßig anders

  • npm installwird installiere / aktualisiere devDependencies es sei denn --productionFlag hinzugefügt wird
  • npm updatewird ignoriert devDependencies es sei denn , --devFlagge hinzugefügt wird

Warum npm installüberhaupt verwenden?

Denn npm installmacht mehr, wenn Sie neben dem Umgang mit Ihren Abhängigkeiten in suchen package.json. Wie Sie in npm install sehen können , können Sie ...

  • Knotenmodule manuell installieren
  • Setzen Sie sie als global (wodurch sie in die Shell aufgenommen werden PATH) mitnpm install -g <name>
  • Installieren Sie bestimmte Versionen, die durch Git-Tags beschrieben werden
  • Installieren Sie von einer Git-URL
  • Erzwingen Sie eine Neuinstallation mit --force

20
und was ist mit ~1.3?
Offirmo

6
Was ist, wenn die Version wie ^ 5.0.9 ist? Und ist es möglich, npm install --save somePackagedas * in Abhängigkeiten zu speichern?
KwiZ

5
Ich würde auch bemerken, dass Skripte wie postinstallbei der Installation ausgeführt werden, aber nicht beim Update.
Michael Marvick

2
Wenn installund updatearbeiten Sie anders mit Git-URLs, Git-Tags usw., die im angegeben sind package.json, wäre es großartig, diese Fälle dem Beispiel hinzuzufügen.
Joeytwiddle

2
@Offirmo die Tilde in der Fuzzy-Versionierung bedeutet "Update auf die neueste Minor-Version (Bugfix) dieses Pakets", wobei die Minor-Version die letzte Nummer in der Version ist, dh 1.3.0 -> 1.3.1dies ist ähnlich wie ^1.3.0bei der ^Update-Hauptversion, dh 1.3.0 -> 1.4.0.
Boyan Kushlev

82

npm install installiert alle Module, die in der package.jsonDatei aufgeführt sind, und ihre Abhängigkeiten.

npm update aktualisiert alle Pakete im node_modulesVerzeichnis und ihre Abhängigkeiten.

npm install express installiert nur das Express-Modul und seine Abhängigkeiten.

npm update express aktualisiert das Express-Modul (beginnend mit npm@2.x werden die Abhängigkeiten nicht aktualisiert).

Updates sind also für den Fall gedacht, dass Sie das Modul bereits haben und die neue Version erhalten möchten.


5
Wenn Sie in einer package.json-Datei keine bestimmte Version angeben, erhält npm install die neueste Version eines Moduls. Das ist also eine Art Update.
Saeed

11
Was soll ich also verwenden npm installoder npm update? Oder mit anderen Worten, ich verwende jetzt npm installund es scheint auch die Aktualisierung durchzuführen. Gibt es einen Grund, warum ich jemals verwenden sollte npm update?
Borek Bernard

4
So updatewird aktualisiert , immer auf die neueste Version, unabhängig von package.json, während installdie Version in package.json gegeben respektieren?
Borek Bernard

1
updateInstalliert (oder aktualisiert) die neueste Version des Moduls. installInstalliert die neueste Version des Moduls, wenn es nicht angezeigt wird. Andernfalls wird die aktuelle Version beibehalten.
Tenphi

11
@Borek npm updatewird basierend auf Ihrer package.json auf die neueste Version aktualisiert, unabhängig davon. Wenn Sie "express": "3.x" haben und sich in Version 3.1.0 befinden, wird es auf das neueste 3.x-Tag aktualisiert. Wenn es eine 4.x-Version gibt, wird nicht die neueste Version installiert.
Gcochard

47

In den meisten Fällen wird dadurch die neueste Version des auf npm veröffentlichten Moduls installiert.

npm install express --save

oder besser, um das Modul auf die neueste Version zu aktualisieren:

npm install express@latest --save --force

--save: Paket wird in Ihren Abhängigkeiten angezeigt.

Weitere Infos: npm-install


11
npm install express@latest --save --forcewar genau das, was ich wollte.
Thomas Reggi

2
In den meisten Fällen? Irgendwelche anderen Fälle?
Dmitri Zaitsev

9

Viele Unterschiede wurden bereits erwähnt. Hier ist noch einer:

Laufen npm installan der Spitze Ihres Quellverzeichnis werden verschiedene Skripte ausgeführt: prepublish, preinstall, install, postinstall. Je nachdem, was diese Skripte tun, npm installkann a erheblich mehr Arbeit leisten als nur Abhängigkeiten zu installieren.

Ich hatte gerade einen Anwendungsfall, in dem prepublishaufgerufen wurde, makeund der Makefilewurde entwickelt, um Abhängigkeiten abzurufen, wenn der package.jsonaktualisiert wurde. Das Aufrufen npm installvon innerhalb des Makefilehätte zu einer unendlichen Rekursion geführt, während das Aufrufen einwandfrei npm updatefunktioniert und alle Abhängigkeiten installiert hat, sodass der Build auch dann fortgesetzt werden kann, wenn makeer direkt aufgerufen wird.


1
Eine Implikation ist, dass, wenn Sie beispielsweise Ihr redisModul aktualisiert haben und other_moduleeine ältere Version von benötigen redis, npm install other_modulegarantiert wird, dass other_moduledie ältere Version verwendet wird. Es kann other_module/node_modules/redisbei Bedarf hinzugefügt werden.
Jlukanta

4

npm update: Installation und Aktualisierung mit den neuesten Knotenmodulen in package.json

npm install: Installieren Sie Knotenmodule, die in package.json definiert sind (ohne Update).


Bei Verwendung von npm Version 6.9.0 beobachte ich das folgende Verhalten: npm updateEine große Anzahl von Abhängigkeiten in wird weggelassen package-lock.json. Um alle erforderlichen Pakete zur Verfügung zu haben und package-lock.jsonkorrekt zu sein, muss ich immer npm installdirekt danach ausführen npm update.
Manfred
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.