Le fichier package-lock.json est généré automatiquement lors de l'installation des packages de nœuds. Apprenez de quoi il s'agit
In version 5, npmintroduit lepackage-lock.json
déposer.
Qu'est ce que c'est? Vous connaissez probablement lepackage.json
déposer, ce qui est beaucoup plus courant et existe depuis beaucoup plus longtemps.
Le but du fichier est de garder une trace de la version exacte de chaque paquet qui est installé afin qu'un produit soit 100% reproductible de la même manière même si les paquets sont mis à jour par leurs responsables.
Cela résout un problème très spécifique quipackage.json
laissé non résolu. Dans package.json, vous pouvez définir les versions vers lesquelles vous souhaitez mettre à niveau (correctif ou mineur), à l'aide dusemvernotation, par exemple:
- si tu écris
~0.13.0
, vous souhaitez uniquement mettre à jour les versions de correctifs:0.13.1
ça va, mais0.14.0
n'est pas. - si tu écris
^0.13.0
, vous souhaitez mettre à jour le correctif et les versions mineures:0.13.1
,0.14.0
etc. - si tu écris
0.13.0
, c'est la version exacte qui sera utilisée, toujours
Vous ne vous engagez pas dans Git votre dossier node_modules, qui est généralement énorme, et lorsque vous essayez de répliquer le projet sur une autre machine en utilisant lenpm install
commande, si vous avez spécifié la~
syntaxe et une version de correctif d'un paquet a été publiée, celle-ci va être installée. Pareil pour^
et les versions mineures.
Si vous spécifiez des versions exactes, comme
0.13.0
dans l'exemple, vous n'êtes pas concerné par ce problème.
Il peut s'agir de vous ou d'une autre personne essayant d'initialiser le projet à l'autre bout du monde en exécutantnpm install
.
Ainsi, votre projet d'origine et le projet nouvellement initialisé sont en fait différents. Même si un correctif ou une version mineure ne devrait pas introduire de changements de rupture, nous savons tous que des bogues peuvent (et donc, ils le feront) glisser.
Lepackage-lock.json
définit votre version actuellement installée de chaque packageen pierre, etnpm
utilisera ces versions exactes lors de l'exécutionnpm install
.
Ce concept n'est pas nouveau, et d'autres gestionnaires de packages de langages de programmation (comme Composer en PHP) utilisent un système similaire depuis des années.
Lepackage-lock.json
Le fichier doit être validé dans votre référentiel Git, afin qu'il puisse être récupéré par d'autres personnes, si le projet est public ou si vous avez des collaborateurs, ou si vous utilisez Git comme source pour les déploiements.
Les versions des dépendances seront mises à jour dans lepackage-lock.json
fichier lorsque vous exécuteznpm update
.
Un exemple
Ceci est un exemple de structure d'unpackage-lock.json
fichier que nous obtenons lorsque nous exécutonsnpm install cowsay
dans un dossier vide:
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"ansi-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.
0.0.tgz",
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
},
"cowsay": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz"
,
"integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkM
Ajufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==",
"requires": {
"get-stdin": "^5.0.1",
"optimist": "~0.6.1",
"string-width": "~2.1.1",
"strip-eof": "^1.0.0"
}
},
"get-stdin": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.
1.tgz",
"integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g="
},
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/
is-fullwidth-code-point-2.0.0.tgz",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
},
"minimist": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10
.tgz",
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
},
"optimist": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
<span style="color:#f92672">"requires"</span>: {
<span style="color:#f92672">"minimist"</span>: <span style="color:#e6db74">"~0.0.1"</span>,
<span style="color:#f92672">"wordwrap"</span>: <span style="color:#e6db74">"~0.0.2"</span>
}
},
<span style="color:#f92672">"string-width"</span>: {
<span style="color:#f92672">"version"</span>: <span style="color:#e6db74">"2.1.1"</span>,
<span style="color:#f92672">"resolved"</span>: <span style="color:#e6db74">"https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz"</span>,
<span style="color:#f92672">"integrity"</span>: <span style="color:#e6db74">"sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw=="</span>,
<span style="color:#f92672">"requires"</span>: {
<span style="color:#f92672">"is-fullwidth-code-point"</span>: <span style="color:#e6db74">"^2.0.0"</span>,
<span style="color:#f92672">"strip-ansi"</span>: <span style="color:#e6db74">"^4.0.0"</span>
}
},
<span style="color:#f92672">"strip-ansi"</span>: {
<span style="color:#f92672">"version"</span>: <span style="color:#e6db74">"4.0.0"</span>,
<span style="color:#f92672">"resolved"</span>: <span style="color:#e6db74">"https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz"</span>,
<span style="color:#f92672">"integrity"</span>: <span style="color:#e6db74">"sha1-qEeQIusaw2iocTibY1JixQXuNo8="</span>,
<span style="color:#f92672">"requires"</span>: {
<span style="color:#f92672">"ansi-regex"</span>: <span style="color:#e6db74">"^3.0.0"</span>
}
},
<span style="color:#f92672">"strip-eof"</span>: {
<span style="color:#f92672">"version"</span>: <span style="color:#e6db74">"1.0.0"</span>,
<span style="color:#f92672">"resolved"</span>: <span style="color:#e6db74">"https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz"</span>,
<span style="color:#f92672">"integrity"</span>: <span style="color:#e6db74">"sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="</span>
},
<span style="color:#f92672">"wordwrap"</span>: {
<span style="color:#f92672">"version"</span>: <span style="color:#e6db74">"0.0.3"</span>,
<span style="color:#f92672">"resolved"</span>: <span style="color:#e6db74">"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz"</span>,
<span style="color:#f92672">"integrity"</span>: <span style="color:#e6db74">"sha1-o9XabNXAvAAI03I0u68b7WMFkQc="</span>
}
}
}
Nous avons installécowsay
, qui dépend de
get-stdin
optimist
string-width
strip-eof
À leur tour, ces packages nécessitent d'autres packages, comme nous pouvons le voir sur lerequires
propriété que certains possèdent:
ansi-regex
is-fullwidth-code-point
minimist
wordwrap
strip-eof
Ils sont ajoutés par ordre alphabétique dans le fichier, et chacun a unversion
champ, unresolved
champ qui pointe vers l'emplacement du package, et unintegrity
chaîne que nous pouvons utiliser pour vérifier le package.
Téléchargez mon gratuitManuel de Node.js
Plus de didacticiels sur les nœuds:
- Une introduction au gestionnaire de paquets npm
- Introduction à Node.js
- Requêtes HTTP utilisant Axios
- Où héberger une application Node.js
- Interagissez avec l'API Google Analytics à l'aide de Node.js
- Le lanceur de package npx Node
- Le guide package.json
- Où npm installe-t-il les packages?
- Comment mettre à jour Node.js
- Comment utiliser ou exécuter un package installé à l'aide de npm
- Le fichier package-lock.json
- Gestion des versions sémantiques à l'aide de npm
- Devez-vous valider le dossier node_modules dans Git?
- Mettez à jour toutes les dépendances de nœud vers leur dernière version
- Analyser JSON avec Node.js
- Rechercher la version installée d'un package npm
- Flux Node.js
- Installer une ancienne version d'un package npm
- Obtenir le dossier actuel dans Node
- Comment enregistrer un objet dans Node
- Exposer la fonctionnalité d'un fichier Node à l'aide d'export
- Différences entre Node et le navigateur
- Faire une requête HTTP POST à l'aide de Node
- Obtenir les données du corps de la requête HTTP à l'aide de Node
- Tampons de nœud
- Une brève histoire de Node.js
- Comment installer Node.js
- Quelle quantité de JavaScript devez-vous connaître pour utiliser Node?
- Comment utiliser le REPL Node.js
- Nœud, accepter les arguments de la ligne de commande
- Sortie vers la ligne de commande à l'aide de Node
- Accepter l'entrée de la ligne de commande dans Node
- Désinstaller les packages npm avec `npm uninstall`
- packages mondiaux ou locaux npm
- dépendances npm et devDependencies
- La boucle d'événements Node.js
- Comprendre process.nextTick ()
- Comprendre setImmediate ()
- L'émetteur d'événement de nœud
- Construire un serveur HTTP
- Faire des requêtes HTTP avec Node
- Le module Node fs
- Requêtes HTTP dans Node utilisant Axios
- Lire des fichiers avec Node
- Chemins de fichiers de noeud
- Écriture de fichiers avec Node
- Statistiques du fichier de nœud
- Utilisation des descripteurs de fichiers dans Node
- Travailler avec des dossiers dans Node
- Le module de chemin de nœud
- Le module Node http
- Utilisation de WebSockets avec Node.js
- Les bases de l'utilisation de MySQL et de Node
- Gestion des erreurs dans Node.js
- Le guide du carlin
- Comment lire les variables d'environnement à partir de Node.js
- Comment quitter un programme Node.js
- Le module Node OS
- Le module d'événements Node
- Node, la différence entre développement et production
- Comment vérifier si un fichier existe dans Node.js
- Comment créer un fichier vide dans Node.js
- Comment supprimer un fichier avec Node.js
- Comment obtenir la dernière date de mise à jour d'un fichier à l'aide de Node.js
- Comment déterminer si une date est aujourd'hui en JavaScript
- Comment écrire un objet JSON dans un fichier dans Node.js
- Pourquoi devriez-vous utiliser Node.js dans votre prochain projet?
- Exécutez un serveur Web à partir de n'importe quel dossier
- Comment utiliser MongoDB avec Node.js
- Utilisez Chrome DevTools pour déboguer une application Node.js
- Qu'est-ce que pnpm?
- Liste des options de Node.js Runtime v8
- Comment corriger l'erreur "Accès en écriture manquant" lors de l'utilisation de npm
- Comment activer les modules ES dans Node.js
- Comment générer un processus enfant avec Node.js
- Comment obtenir à la fois du corps analysé et du corps brut dans Express
- Comment gérer les téléchargements de fichiers dans Node.js
- Que sont les dépendances homologues dans un module Node?
- Comment écrire un fichier CSV avec Node.js
- Comment lire un fichier CSV avec Node.js
- Les modules Node Core
- Incrémenter plusieurs numéros de dossiers à la fois à l'aide de Node.js
- Comment imprimer un canevas sur une URL de données
- Comment créer et enregistrer une image avec Node.js et Canvas
- Comment télécharger une image à l'aide de Node.js
- Comment renommer en masse des fichiers dans Node.js
- Comment obtenir les noms de tous les fichiers d'un dossier dans Node
- Comment utiliser les promesses et attendre avec les fonctions basées sur le rappel de Node.js
- Comment tester un package npm localement
- Comment vérifier la version actuelle de Node.js au moment de l'exécution
- Comment utiliser Sequelize pour interagir avec PostgreSQL
- Servir une page HTML à l'aide de Node.js
- Comment résoudre l'erreur `util.pump n'est pas une fonction` dans Node.js