npm install vs update - quelle est la différence?

520

Quelle est la différence pratique entre npm installet npm update? Quand devrais-je utiliser quoi?

Borek Bernard
la source

Réponses:

655

La différence entre l' installation de npm et la gestion de mise à jour de npm des versions de package spécifiées dans 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
  }
}

Résumé : La seule grande différence est qu'un module déjà installé avec des versions floues ...

  • est ignoré par npm install
  • est mis à jour par npm update

De plus : installet updatepar défaut, gérer les devDependencies différemment

  • npm installva installer / mettre à jour devDependencies sauf si le --productiondrapeau est ajouté
  • npm updateva ignorer devDependencies sauf si le --devdrapeau est ajouté

Pourquoi utiliser npm installdu tout?

Parce que npm installfait plus lorsque vous regardez en plus de gérer vos dépendances dans package.json. Comme vous pouvez le voir dans l' installation de npm, vous pouvez ...

  • installer manuellement des modules de nœuds
  • les définir comme globaux (ce qui les place dans le shell PATH) en utilisantnpm install -g <name>
  • installer certaines versions décrites par les balises git
  • installer à partir d'une URL git
  • forcer une réinstallation avec --force
xanderiel
la source
20
et qu'en est-il ~1.3?
Offirmo
6
que faire si la version est comme ^ 5.0.9? Et est-il possible de faire npm install --save somePackageenregistrer le * dans les dépendances?
KwiZ
5
Je noterais également que des scripts comme postinstallexécutés lors de l'installation, mais pas lors de la mise à jour.
Michael Marvick
2
Si installet updatetravailler différemment sur les URL git, les balises git, etc. spécifiées dans le package.jsonalors ce serait bien d'ajouter ces cas à l'exemple.
joeytwiddle
2
@Offirmo le tilde dans le versioning flou signifie "mise à jour vers la dernière version mineure (correction de bogue) de ce package", la version mineure étant le dernier numéro de la version, c'est-à-dire, c'est 1.3.0 -> 1.3.1similaire à ^1.3.0, où la ^version principale des mises à jour, c'est-à-dire 1.3.0 -> 1.4.0.
Boyan Kushlev
82

npm install installe tous les modules répertoriés dans le package.jsonfichier et leurs dépendances.

npm update met à jour tous les packages du node_modulesrépertoire et leurs dépendances.

npm install express installe uniquement le module express et ses dépendances.

npm update express met à jour le module express (à partir de [email protected], il ne met pas à jour ses dépendances).

Les mises à jour sont donc pour quand vous avez déjà le module et que vous souhaitez obtenir la nouvelle version.

saeed
la source
5
si vous ne spécifiez pas de version particulière dans un fichier package.json, npm install obtiendra la dernière version d'un module. C'est donc une sorte de mise à jour.
saeed
11
Alors, que dois-je utiliser, npm installou npm update? Ou, en d'autres termes, j'utilise maintenant npm installet il semble également faire la mise à jour, y a-t-il une raison pour laquelle je devrais utiliser npm update?
Borek Bernard
4
Donc, updatesera toujours mis à jour vers la dernière version, quel que soit package.json, tout installen respectant la version donnée dans package.json?
Borek Bernard
1
updateinstalle (ou met à jour) la dernière version du module. installinstalle la dernière version du module si elle n'est pas présentée sinon conserve la version actuelle.
tenphi
11
@Borek npm updatemettra à jour la dernière version en fonction de votre package.json, nonobstant cela. Si vous avez "express": "3.x" et que vous êtes sur la version 3.1.0, il se mettra à jour vers la dernière balise 3.x. S'il existe une version 4.x, elle n'installera pas la dernière.
gcochard
47

Dans la plupart des cas, cela installera la dernière version du module publiée sur npm.

npm install express --save

ou mieux pour mettre à niveau le module vers la dernière version:

npm install express@latest --save --force

--save: Le package apparaîtra dans vos dépendances.

Plus d'informations: npm-install

jmav
la source
11
npm install express@latest --save --forceétait exactement ce que je voulais.
ThomasReggi
2
Dans la plupart des cas? D'autres cas?
Dmitri Zaitsev
9

De nombreuses distinctions ont déjà été mentionnées. En voici encore un:

Courir npm installen haut de votre répertoire source exécutera différents scripts: prepublish, preinstall, install, postinstall. Selon ce que font ces scripts, un npm installpeut faire beaucoup plus de travail que d'installer simplement des dépendances.

Je viens d'avoir un cas d'utilisation où prepublishappeler makeet qui a Makefileété conçu pour récupérer les dépendances s'il package.jsonest mis à jour. Appeler npm installdepuis l'intérieur de la Makefileaurait conduit à une récursion infinie, alors que l'appel npm updatefonctionnait très bien, installant toutes les dépendances pour que la construction puisse continuer même si elle makeétait appelée directement.

MvG
la source
1
Une implication est que si vous avez mis à jour, par exemple, votre redismodule, et que vous avez other_modulebesoin d'une ancienne version de redis, vous npm install other_modulegarantissez qu'il other_moduleutilisera l'ancienne version. Il peut s'ajouter other_module/node_modules/redissi nécessaire.
jlukanta
4

npm update: installer et mettre à jour avec les derniers modules de nœuds qui sont dans package.json

npm install: installe les modules de nœuds définis dans package.json (sans mise à jour)

DSK
la source
En utilisant npm version 6.9.0, j'observe le comportement suivant: npm updateomettra un grand nombre de dépendances dans package-lock.json. Pour avoir tous les packages requis disponibles et package-lock.jsonpour être correct, je dois toujours exécuter npm installjuste après npm update.
Manfred