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==",
    […]
}

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.


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.


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.


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

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",
},

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.