¿Por qué package-lock.json cambió el hash de integridad de sha1 a sha512?

121

Acabo de generar un nuevo archivo de bloqueo npm, package-lock.json, como parte de mi flujo de trabajo típico. Pero noté que esta vez todos los hashes de integridad se han cambiado de sha1 a sha512. ¿Que está sucediendo aquí?

ingrese la descripción de la imagen aquí

"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==",
    […]
}
Mate
fuente
1
Es un problema con npm: github.com/npm/npm/issues/17749
Vlad Minaev
1
El problema mencionado anteriormente se ha cerrado y ahora se crea un artículo para instruir cómo resolver este problema: npm.community/t/shasum-check-or-integrity-eintegrity-errors/153
Kyle Burkett

Respuestas:

105

Por lo que puedo ver, npm cambió la suma de verificación de integridad de sha1 a sha512.

Si sus cambios de git van de sha1 a sha512, debe hacer esa actualización una vez y estará bien después de eso.

Si alguien más trabaja con el código base y ve un cambio de git de sha512 a sha1 (que es el problema que estaba teniendo), puede solucionarlo ejecutando lo siguiente:

Descartar los cambios en git para package-lock.json

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

Esto actualizará npm y reinstalará todos sus paquetes para que la nueva suma de comprobación (sha512) esté presente.

Dave
fuente
1
¿Hay alguna razón para usar sha512 sobre sha1? Mi computadora es actualmente la que está cambiando a sha1 para nuestro entorno.
Elijah1210
@ Elijah1210 ¿Voy a adivinar menos posibilidades de 'falsificar' el hash con una colisión?
Pureferret
20
Esto no fue suficiente en mi caso. Además de eliminar la node_modulescarpeta, también lo necesitaba npm cache clear --force.
Lorenz Meyer
37

Sobre la base de lo que respondió Dave. La solución que encontré fue hacer lo siguiente:

npm i -g npm

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

Hicimos esto para todos nuestros desarrolladores al mismo tiempo y esto detuvo el problema de sha-512 vs sha-1 que estaba causando frustrantes conflictos de fusión.

Daniel Cumings
fuente
6

Consulte también https://github.com/npm/npm/issues/17749 que, aunque afirma que el problema está 'solucionado', no lo es. Eliminar node_moduleses una solución.

Puede haber una relación con los sistemas operativos. Estamos abordando esto ahora mismo con desarrolladores en plataformas Linux y Windows.


fuente
3
Han pasado meses desde que se publicó esto, y todavía lo estoy sufriendo. me está matando
Chad Ruppert
2
Pasamos al hilo al final.
1
Todos los problemas de NPM aparentemente se resolvieron al pasar a Yarn
Solvitieg
2

Como @Daniel Cumings, también tuve que eliminar package-lock.jsonpara deshacerme de los hashes sha1. Aquí están los comandos de la CLI de Windows como referencia, que hace lo mismo que el script de Daniel:

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

Trabajo en un gran equipo. Obligar a todos los desarrolladores a forzar la limpieza de la npmcaché es difícil y no es confiable. Además, esto no ayuda siempre. Entonces, para cualquiera que aún enfrenta este problema de npm (igual que yo) y nada más ayuda, pruebe esta herramienta basada en git que he creado recientemente: https://github.com/kopach/lockfix . Se revierte sha512 -> sha1los cambios de integridad de archivos de bloqueo de la NGP. Si agrega esto a su postshrinkwrapscript de package.json- eventualmente debería obtener todas las propiedades de integridad configuradas sha512y tener el archivo de bloqueo consistente.

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

Continuando con los comentarios y sugerencias anteriores, para mí necesitaba borrar la carpeta node_modules existente, el caché, y luego tomar el archivo sha512 package-lock.json de git (que se comprometió desde otra computadora), y finalmente hacer un npm i . Algo como esto:

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

Después de este package-lock.json usó sha512 y otros cambios se estabilizaron.

Mike Benna
fuente