Perché package-lock.json ha modificato l'hash di integrità da sha1 a sha512?


121

Ho appena generato un nuovo file di blocco npm, package-lock.json, come parte del mio flusso di lavoro tipico. Ma ho notato che questa volta tutti gli hash di integrità sono stati modificati da sha1 a sha512. Cosa sta succedendo qui?

inserisci qui la descrizione dell'immagine

"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
È un problema con npm: github.com/npm/npm/issues/17749
Vlad Minaev

1
Il problema a cui si fa riferimento sopra è stato chiuso e ora è stato creato un articolo per istruire su come risolvere questo problema: npm.community/t/shasum-check-or-integrity-eintegrity-errors/153
Kyle Burkett

Risposte:


105

Da quello che posso vedere, npm ha cambiato il checksum di integrità da sha1 a sha512.

Se le tue modifiche a git stanno passando da sha1 a sha512, dovresti eseguire l'aggiornamento una volta e andrà bene dopo.

Se qualcun altro che lavora con la base di codice e vede un cambiamento di git da sha512 a sha1 (che è il problema che stavo avendo) puoi risolverlo eseguendo quanto segue:

Elimina le modifiche in git per package-lock.json

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

Questo aggiornerà npm e reinstallerà tutti i pacchetti in modo che sia presente il nuovo checksum (sha512).


1
C'è un motivo per usare sha512 su sha1? Il mio computer è attualmente quello che sta cambiando in sha1 per il nostro ambiente.
Elijah 1210

@ Elijah1210 Vado a indovinare meno possibilità di "simulare" l'hash con una collisione?
Pureferret

20
Questo non è stato sufficiente nel mio caso. Oltre a eliminare la node_modulescartella, avevo bisogno npm cache clear --forceanche di.
Lorenz Meyer

37

Basandosi su ciò che Dave ha risposto. La correzione che ho trovato era di fare quanto segue:

npm i -g npm

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

Lo abbiamo fatto per tutti i nostri sviluppatori contemporaneamente e questo ha fermato il problema sha-512 vs sha-1 che stava causando frustranti conflitti di unione.


6

Vedi anche https://github.com/npm/npm/issues/17749 che, sebbene affermi che il problema è "risolto", non lo è. La rimozione node_modulesè una soluzione alternativa.

Potrebbe esserci una relazione con i sistemi operativi. Stiamo raggiungendo questo obiettivo proprio ora con gli sviluppatori su piattaforme Linux e Windows.


3
sono passati mesi da quando è stato pubblicato e ne soffro ancora. mi sta uccidendo
Chad Ruppert

2
Alla fine siamo passati al filato.

1
Ogni problema NPM apparentemente risolto passando a Yarn
Solvitieg

2

Come @Daniel Cumings ho anche dovuto rimuovere il package-lock.jsonper eliminare gli hash sha1. Ecco i comandi dell'interfaccia della riga di comando di Windows come riferimento, che fa la stessa cosa dello script di Daniel:

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

2

Sto lavorando in una grande squadra. Costringere ogni sviluppatore a forzare la pulizia della npmcache è difficile e non affidabile. Inoltre, questo non aiuta ogni volta. Quindi, per chiunque stia ancora affrontando questo problema di npm (come me) e nient'altro aiuta, prova questo strumento basato su git che ho creato di recente: https://github.com/kopach/lockfix . Si ritorna sha512 -> sha1cambiamenti integrità dei file di blocco di NPM. Se aggiungi questo al tuo postshrinkwrapscript di package.json- dovresti eventualmente ottenere tutte le proprietà di integrità impostate su sha512e avere un file di blocco coerente.

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

0

Basandosi ulteriormente sui commenti e sui suggerimenti precedenti, per me avevo bisogno di cancellare la cartella node_modules esistente, la cache, quindi prendere il file sha512 package-lock.json da git (che era stato eseguito il commit da un altro computer), e infine fare un npm i . Qualcosa come questo:

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

Dopo questo pacchetto-lock.json ha utilizzato sha512 e altre modifiche si sono stabilizzate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.