À partir des documents npm :
En bref, les principales différences entre l'utilisation de npm install et npm ci sont:
- Le projet doit avoir un package-lock.json ou npm-shrinkwrap.json existant.
- Si les dépendances du verrou de package ne correspondent pas à celles de package.json, npm ci se fermera avec une erreur, au lieu de mettre à jour le verrou de package.
- npm ci ne peut installer que des projets entiers à la fois: les dépendances individuelles ne peuvent pas être ajoutées avec cette commande.
- Si un node_modules est déjà présent, il sera automatiquement supprimé avant que npm ci ne commence son installation.
- Il n'écrira jamais dans package.json ou l'un des verrous de package: les installations sont essentiellement figées.
Essentiellement,
npm install
lit package.json
pour créer une liste de dépendances et utilise package-lock.json
pour indiquer les versions de ces dépendances à installer. Si aucune dépendance n'est présente, package-lock.json
elle sera ajoutée parnpm install
.
npm ci
( du nom C ontinuous I ntégration) installe les dépendances directement à partir package-lock.json
et utilisations package.json
uniquement pour valider qu'il n'y a pas de versions incompatibles. Si des dépendances sont manquantes ou ont des versions incompatibles, cela générera une erreur .
Permet npm install
d'ajouter de nouvelles dépendances et de mettre à jour des dépendances sur un projet. Habituellement, vous l'utiliseriez pendant le développement après avoir extrait les modifications qui mettent à jour la liste des dépendances, mais il peut être judicieux de l'utiliser npm ci
dans ce cas.
À utiliser npm ci
si vous avez besoin d'une version déterministe et reproductible. Par exemple lors de l'intégration continue, des travaux automatisés, etc. et lors de l'installation des dépendances pour la première fois, au lieu de npm install
.
- Installe un package et toutes ses dépendances.
- Les dépendances sont pilotées par
npm-shrinkwrap.json
et package-lock.json
(dans cet ordre).
- sans arguments : installe les dépendances d'un module local.
- Peut installer des packages globaux.
- Installe toutes les dépendances manquantes dans
node_modules
.
- Il peut écrire à
package.json
ou package-lock.json
.
- Lorsqu'il est utilisé avec un argument (
npm i packagename
), il peut écrire dans package.json
pour ajouter ou mettre à jour la dépendance.
- lorsqu'il est utilisé sans arguments, (
npm i
) il peut écrire dans package-lock.json
pour verrouiller la version de certaines dépendances si elles ne sont pas déjà dans ce fichier.
- Nécessite au moins npm v5.7.1 .
- Nécessite
package-lock.json
ou npm-shrinkwrap.json
être présent.
- Lance une erreur si les dépendances de ces deux fichiers ne correspondent pas
package.json
.
- Supprime
node_modules
et installe toutes les dépendances à la fois.
- Il n'écrit jamais vers
package.json
ou package-lock.json
.
Algorithme
Alors que npm ci
génère l'arborescence de dépendance entière à partir de package-lock.json
ou npm-shrinkwrap.json
, npm install
met à jour le contenu de l'node_modules
utilisation de l'algorithme suivant ( source ):
load the existing node_modules tree from disk
clone the tree
fetch the package.json and assorted metadata and add it to the clone
walk the clone and add any missing dependencies
dependencies will be added as close to the top as is possible
without breaking any other modules
compare the original tree with the cloned tree and make a list of
actions to take to convert one to the other
execute all of the actions, deepest first
kinds of actions are install, update, remove and move
npm install
pouvoir écrire à package.json. Savez-vous ce qu'il pourrait écrire ici?npm install package
pourrait modifier les deuxpackage-lock.json
etpackage.json
, alors que lesnpm install
arguments ne modifieraient quepackage-lock.json