Nous connaissons tous l'installation de npm, mais certains d'entre vous ne connaissent peut-être pas npm ci (installation propre). Cette commande est très utile dans les environnements CI. L'utilisation de npm ci peut rendre votre pipeline de build plus rapide et plus stable. L'apprentissage de ces commandes vous aide à mieux comprendre l'installation de npm et pourquoi package-lock.json et package.json sont si importants. Connaître ces bases vous donne une meilleure clarté.
npm ci est une commande utilisée pour installer des dépendances dans un projet, en mettant l'accent sur la vitesse et la cohérence. Il est particulièrement utile dans les configurations d'intégration continue (CI).
Installation plus rapide :
npm ci ignore la mise à jour de package-lock.json. Il suit strictement les dépendances du fichier de verrouillage, ce qui rend le processus plus rapide et prévisible.
Fichier de verrouillage strict :
Il utilise les versions exactes des dépendances dans package-lock.json. S'il y a une incompatibilité entre package.json et package-lock.json, une erreur sera générée. Cela garantit que tous les environnements (local, CI, production) utilisent les mêmes dépendances.
Table rase :
Avant l'installation, npm ci supprime le dossier node_modules pour repartir à zéro.
Voici un tableau de référence rapide qui vous ouvre de nombreuses zones cachées en comprenant les principales différences entre npm install et npm ci :
Étape | installation npm | npm ci |
---|---|---|
1. Résolution des dépendances | Résout les dépendances en fonction de package.json et met à jour package-lock.json pour refléter les modifications. | Ignore la résolution, en utilisant les versions exactes dans package-lock.json sans faire référence à package.json pour les plages de versions. |
2. Vérification de la compatibilité des versions | Garantit que les dépendances répondent aux plages spécifiées dans package.json, met à jour package-lock.json si nécessaire. | Nécessite que les versions de package-lock.json correspondent exactement à package.json ; échoue s'il n'est pas synchronisé. |
3. Nettoyage de node_modules | Installe uniquement les packages manquants ou mis à jour sans supprimer node_modules, en conservant les dépendances existantes inchangées. | Supprime entièrement node_modules avant de tout réinstaller à nouveau. |
4. Génération de fichiers de verrouillage | Génère un nouveau package-lock.json s'il n'en existe pas ; le met à jour en fonction des modifications de package.json. | Nécessite un package-lock.json existant et échoue s'il est manquant ou désynchronisé avec package.json. |
5. Synchroniser avec package.json | Mise à jour package-lock.json pour s'aligner sur toutes les dépendances nouvelles, modifiées ou supprimées dans package.json. | Nécessite que package-lock.json corresponde exactement à package.json ; sinon, il échoue, garantissant une stricte cohérence des versions. |
6. Installation des dépendances | Installe les dépendances dans node_modules en fonction de package.json, en mettant à jour package-lock.json avec toutes les versions résolues. | Installe les dépendances exactement comme spécifié dans package-lock.json, garantissant la reproductibilité et ignorant les plages de versions dans package.json. |
7. Modifications du fichier de verrouillage | Modifie package-lock.json pour qu'il corresponde automatiquement aux modifications de package.json. | Ne modifie pas package-lock.json quelles que soient les modifications de package.json, en maintenant la cohérence. |
8. Demandes de réseau | Récupère toutes les nouvelles dépendances ou mises à jour introuvables dans node_modules. | Récupère uniquement les dépendances répertoriées dans package-lock.json, en ignorant les vérifications supplémentaires. |
9. Vitesse | Plus lent, en raison de la résolution des dépendances, des mises à jour potentielles des fichiers de verrouillage et des installations incrémentielles. | Plus rapide, en utilisant uniquement package-lock.json pour des installations exactes, minimisant ainsi le traitement. |
10. Priorité des fichiers | package.json est prioritaire : les dépendances sont résolues en fonction de celui-ci et package-lock.json est mis à jour pour refléter les modifications. | package-lock.json est prioritaire : les installations en utilisent les versions exactes, en ignorant package.json, sauf pour vérifier les erreurs de synchronisation (échouant si elles ne correspondent pas). |
11. Cas d'utilisation idéal | Idéal pour le développement local lors de la modification ou de l'ajout de dépendances. | Idéal pour les environnements CI/CD, la production ou à tout moment, la cohérence, la vitesse et la reproductibilité sont essentielles. |
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!