Pourquoi package-lock.json a-t-il changé le hachage d'intégrité de sha1 à sha512?

121

Je viens de générer un nouveau fichier de verrouillage npm, package-lock.json, dans le cadre de mon flux de travail typique. Mais j'ai remarqué que cette fois, tous les hachages d'intégrité ont été modifiés de sha1 à sha512. Que se passe-t-il ici?

entrez la description de l'image ici

"chalk": {
    "version": "2.0.1",
    "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
-   "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=",
+   "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
    […]
}
Mat
la source
1
C'est un problème avec npm: github.com/npm/npm/issues/17749
Vlad Minaev
1
Le problème référencé ci-dessus a été fermé et un article est maintenant créé pour expliquer comment résoudre ce problème: npm.community/t/shasum-check-or-integrity-eintegrity-errors/153
Kyle Burkett

Réponses:

105

D'après ce que je peux voir, npm a changé la somme de contrôle d'intégrité de sha1 à sha512.

Si vos changements git vont de sha1 à sha512, vous devriez faire cette mise à jour une fois et ce sera bien après cela.

Si quelqu'un d'autre travaille avec la base de code et voit un changement git de sha512 à sha1 (ce qui est le problème que j'avais), vous pouvez le résoudre en exécutant ce qui suit:

Ignorez les modifications de git pour package-lock.json

npm i -g npm
rm -rf node_modules/
npm i

Cela mettra à jour npm et réinstallera tous vos packages afin que la nouvelle somme de contrôle (sha512) soit présente.

Dave
la source
1
Y a-t-il une raison d'utiliser sha512 sur sha1? Mon ordinateur est actuellement celui qui passe à sha1 pour notre environnement.
Elijah1210
@ Elijah1210 Je vais deviner moins de possibilité de «simuler» le hachage avec une collision?
Pureferret
20
Ce n'était pas suffisant dans mon cas. En plus de supprimer le node_modulesdossier, j'en avais besoin npm cache clear --forceaussi.
Lorenz Meyer
37

S'appuyant sur ce que Dave a répondu. Le correctif que j'ai trouvé était de faire ce qui suit:

npm i -g npm

cd {working directory}
rm -rf node_modules/
rm package-lock.json
npm cache clear --force
npm i

Nous l'avons fait pour tous nos développeurs en même temps et cela a arrêté le problème sha-512 vs sha-1 qui provoquait des conflits de fusion frustrants.

Daniel Cumings
la source
6

Voir également https://github.com/npm/npm/issues/17749 qui, bien que prétendant que le problème est `` résolu '', ne l'est pas. La suppression node_modulesest une solution de contournement.

Il peut y avoir une relation avec les systèmes d'exploitation. Nous abordons ce problème en ce moment avec les développeurs sur les plates-formes Linux et Windows.


la source
3
cela fait des mois que cela a été publié, et j'en souffre toujours. it is KILLING ME
Chad Ruppert
2
Nous sommes passés au fil à la fin.
1
Chaque problème de NPM semble résolu en passant à Yarn
Solvitieg
2

En tant que @Daniel Cumings, j'ai également dû supprimer le package-lock.jsonpour me débarrasser des hachages sha1. Voici les commandes Windows CLI pour référence, qui font la même chose que le script de Daniel:

npm i -g npm
rd /s /q "node_modules"
del package-lock.json
npm cache clear --force
npm i
Marcel
la source
2

Je travaille en grande équipe. Forcer chaque développeur à forcer le nettoyage du npmcache est difficile et peu fiable. De plus, cela n'aide pas à chaque fois. Donc, pour tous ceux qui sont toujours confrontés à ce problème de npm (comme moi) et que rien d'autre n'aide - essayez cet outil basé sur git que j'ai récemment construit: https://github.com/kopach/lockfix . Il annule les sha512 -> sha1modifications d'intégrité des fichiers de verrouillage de npm. Si vous ajoutez ceci à votre postshrinkwrapscript de package.json- vous devriez finalement obtenir toutes les propriétés d'intégrité définies sur sha512et avoir un fichier de verrouillage cohérent.

npm install --save-dev lockfix
"scripts": {
    "postshrinkwrap": "lockfix",
},
Ihor
la source
0

En s'appuyant davantage sur les commentaires et suggestions précédents, pour moi, je devais effacer le dossier node_modules existant, le cache, puis récupérer le fichier sha512 package-lock.json de git (qui a été commis depuis un autre ordinateur), et enfin faire un npm i . Quelque chose comme ça:

npm i -g npm
rm -rf node_modules/
npm cache clear --force
git reset --hard
npm i

Après ce package-lock.json a utilisé sha512 et d'autres changements se sont stabilisés.

Mike Benna
la source