Le fichier package-lock.json

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.jsondéposer.

Qu'est ce que c'est? Vous connaissez probablement lepackage.jsondé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.jsonlaissé 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.0n'est pas.
  • si tu écris^0.13.0, vous souhaitez mettre à jour le correctif et les versions mineures:0.13.1,0.14.0etc.
  • si tu écris0.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 installcommande, 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, comme0.13.0dans 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.jsondéfinit votre version actuellement installée de chaque packageen pierre, etnpmutilisera 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.jsonLe 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.jsonfichier lorsque vous exécuteznpm update.

Un exemple

Ceci est un exemple de structure d'unpackage-lock.jsonfichier que nous obtenons lorsque nous exécutonsnpm install cowsaydans 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 lerequiresproprié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 unversionchamp, unresolvedchamp qui pointe vers l'emplacement du package, et unintegritychaî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: