npm install vs. update: qual è la differenza?


520

Qual è la differenza pratica tra npm installe npm update? Quando dovrei usare quale?

Risposte:


655

La differenza tra npm install e npm update handling delle versioni del pacchetto specificate in package.json :

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

Riepilogo : l'unica grande differenza è che un modulo già installato con versione fuzzy ...

  • viene ignorato da npm install
  • viene aggiornato da npm update

Inoltre : installe updateper impostazione predefinita gestire devDependencies in modo diverso

  • npm installsarà l'installazione / aggiornamento devDependencies a meno che non --productionsi aggiunge bandiera
  • npm updatesi ignora devDependencies a meno che non --devsi aggiunge bandiera

Perché usare npm installaffatto?

Perché npm installfa di più quando guardi oltre a gestire le tue dipendenze package.json. Come puoi vedere in npm install puoi ...

  • installare manualmente i moduli-nodo
  • impostarli come globali (che li inserisce nella shell PATH) usandonpm install -g <name>
  • installa alcune versioni descritte dai tag git
  • installa da un URL git
  • forzare una reinstallazione con --force

20
e che dire ~1.3?
Offirmo,

6
cosa succede se la versione è come ^ 5.0.9? Ed è possibile npm install --save somePackagesalvare * per le dipendenze?
KwiZ,

5
Vorrei anche notare che gli script come postinstalleseguono all'installazione, ma non all'aggiornamento.
Michael Marvick,

2
Se installe updatefunziona diversamente su URL git, tag git, ecc. Specificati nel package.json, sarebbe bello aggiungere quei casi all'esempio.
joeytwiddle,

2
@Offirmo la tilde nel versioning fuzzy significa "aggiorna all'ultima versione minore (bugfix) di questo pacchetto", la versione minore è l'ultimo numero nella versione, cioè 1.3.0 -> 1.3.1Questo è simile a ^1.3.0, dove la ^versione principale degli aggiornamenti, cioè 1.3.0 -> 1.4.0.
Boyan Kushlev il

82

npm install installa tutti i moduli elencati nel package.jsonfile e le relative dipendenze.

npm update aggiorna tutti i pacchetti nella node_modulesdirectory e le loro dipendenze.

npm install express installa solo il modulo express e le sue dipendenze.

npm update express aggiorna il modulo express (a partire da npm@2.x, non aggiorna le sue dipendenze).

Quindi gli aggiornamenti sono per quando hai già il modulo e desideri ottenere la nuova versione.


5
se non specifichi una versione particolare in un file package.json, npm install otterrà la versione più recente di un modulo. Quindi questo è una specie di aggiornamento.
Saeed,

11
Quindi cosa dovrei usare npm installo npm update? O, in altre parole, ora sto usando npm installe sembra fare anche l'aggiornamento, c'è qualche motivo per cui dovrei mai usare npm update?
Borek Bernard,

4
Quindi updateaggiornerò sempre all'ultima versione, indipendentemente da package.json, mentre installrispetterà la versione fornita in package.json?
Borek Bernard,

1
updateinstalla (o aggiorna) l'ultima versione del modulo. installinstalla l'ultima versione del modulo se non viene presentato altrimenti mantiene la versione corrente.
tenphi,

11
@Borek npm updateeseguirà l'aggiornamento all'ultima versione basata su package.json, indipendentemente da esso. Se hai "express": "3.x" e sei nella versione 3.1.0, verrà aggiornato all'ultimo tag 3.x. Se esiste una versione 4.x, non installerà l'ultima.
gcochard,

47

Nella maggior parte dei casi, verrà installata l'ultima versione del modulo pubblicata su npm.

npm install express --save

o meglio per aggiornare il modulo all'ultima versione utilizzare:

npm install express@latest --save --force

--save: Il pacchetto apparirà nelle tue dipendenze.

Ulteriori informazioni: npm-install


11
npm install express@latest --save --forceera esattamente quello che volevo.
ThomasReggi,

2
Nella maggior parte dei casi? Altri casi?
Dmitri Zaitsev,

9

Molte distinzioni sono già state menzionate. Eccone un altro:

Esecuzione npm installin cima alla vostra directory di origine eseguirà vari script: prepublish, preinstall, install, postinstall. A seconda di ciò che fanno questi script, a npm installpuò fare molto più lavoro della semplice installazione di dipendenze.

Ho appena avuto un caso d'uso in cui prepublishchiamerei makeed è Makefilestato progettato per recuperare le dipendenze se package.jsonfosse aggiornato. Chiamare npm installdall'interno Makefileavrebbe portato a una ricorsione infinita, mentre la chiamata ha npm updatefunzionato bene, installando tutte le dipendenze in modo che la build potesse procedere anche se makefosse chiamata direttamente.


1
Un'implicazione è che se, ad esempio, hai aggiornato il tuo redismodulo e other_modulerichiedi una versione precedente di redis, npm install other_modulegarantirai che other_moduleutilizzerà la versione precedente. Può aggiungere other_module/node_modules/redisse necessario.
jlukanta,

4

npm update: installa e aggiorna con i moduli nodo più recenti che si trovano in package.json

npm install: installa i moduli del nodo che sono definiti in package.json (senza aggiornamento)


Utilizzando npm versione 6.9.0 osservo il seguente comportamento: npm updateometterò un gran numero di dipendenze in package-lock.json. Per avere tutti i pacchetti richiesti disponibili e package-lock.jsonper essere corretti, devo sempre eseguire npm installsubito dopo npm update.
Manfred,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.