Por que o package-lock.json mudou o hash de integridade de sha1 para sha512?

121

Acabei de gerar um novo arquivo de bloqueio npm, pacote-lock.json, como parte do meu fluxo de trabalho típico. Mas percebi que desta vez todos os hashes de integridade foram alterados de sha1 para sha512. O que esta acontecendo aqui?

insira a descrição da imagem aqui

"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==",
    […]
}
Matt
fonte
1
É um problema com o npm: github.com/npm/npm/issues/17749
Vlad Minaev
1
O problema mencionado acima foi encerrado e agora um artigo foi criado para instruir como resolver esse problema: npm.community/t/shasum-check-or-integrity-eintegrity-errors/153
Kyle Burkett

Respostas:

105

Pelo que posso ver, o npm mudou a soma de verificação de integridade de sha1 para sha512.

Se suas mudanças no git vão de sha1 para sha512, você deve fazer essa atualização uma vez e será bom depois disso.

Se outra pessoa que está trabalhando com a base de código e vê uma mudança git de sha512 para sha1 (que é o problema que eu estava tendo), você pode consertar executando o seguinte:

Descarte as mudanças no git para package-lock.json

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

Isso atualizará o npm e reinstalará todos os seus pacotes para que a nova soma de verificação (sha512) esteja presente.

Dave
fonte
1
Existe uma razão para usar sha512 em vez de sha1? Meu computador é atualmente o que está mudando para sha1 para o nosso ambiente.
Elijah1210
@ Elijah1210 Vou adivinhar menos possibilidade de 'falsificar' o hash com uma colisão?
Pureferret de
20
Isso não foi suficiente no meu caso. Além de excluir a node_modulespasta, eu precisava npm cache clear --forcetambém.
Lorenz Meyer
37

Com base no que Dave respondeu. A correção que encontrei foi fazer o seguinte:

npm i -g npm

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

Fizemos isso para todos os nossos desenvolvedores ao mesmo tempo e interrompeu o problema sha-512 vs sha-1 que estava causando conflitos de mesclagem frustrantes.

Daniel Cumings
fonte
6

Veja também https://github.com/npm/npm/issues/17749 que, embora afirme que o problema está "corrigido", não está. A remoção node_modulesé uma solução alternativa.

Pode haver um relacionamento com os sistemas operacionais. Estamos atingindo isso agora com desenvolvedores nas plataformas Linux e Windows.


fonte
3
faz meses que isso foi postado e ainda estou sofrendo com isso. está me matando
Chad Ruppert
2
No final, mudamos para o fio.
1
Todos os problemas do NPM aparentemente resolvidos com a mudança para Yarn
Solvitieg
2

Como @Daniel Cumings também tive que remover o package-lock.jsonpara me livrar dos hashes sha1. Aqui estão os comandos da CLI do Windows para referência, que fazem o mesmo que o script de Daniel:

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

Estou trabalhando em uma grande equipe. Forçar cada desenvolvedor a forçar a limpeza do npmcache é difícil e não confiável. Além disso, isso não ajuda sempre. Então, para quem ainda enfrenta esse problema de npm (o mesmo que eu) e nada mais ajuda - tente esta ferramenta baseada em git que construí recentemente: https://github.com/kopach/lockfix . Ele reverte as sha512 -> sha1alterações de integridade dos arquivos de bloqueio do npm. Se você adicionar isso ao seu postshrinkwrapscript de package.json- você deve eventualmente obter todas as propriedades de integridade definidas como sha512e ter o arquivo de bloqueio consistente.

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

Com base nos comentários e sugestões anteriores, eu precisava limpar a pasta node_modules existente, o cache, e então pegar o arquivo sha512 package-lock.json do git (que foi confirmado de outro computador) e, finalmente, fazer um npm i . Algo assim:

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

Após este package-lock.json usado sha512 e outras mudanças estabilizadas.

Mike Benna
fonte