Preciso do package-lock.json e do package.json?

149

Depois de atualizar meu NPM para a versão mais recente (de 3.X para 5.2.0) e executar npm installum projeto existente, recebo um package-lock.jsonarquivo criado automaticamente.

Eu posso dizer que package-lock.jsonme dá uma árvore de dependência exata, por oposição a package.json.

A partir dessa informação, parece que package.jsoné redundante e não é mais necessário.

Ambos são necessários para o NPM funcionar?
É seguro ou possível usar apenas o package-lock.jsonarquivo?

Os docs no pacote-lock.json ( doc1 , doc2 faz) não mencionar nada sobre isso.

Editar :

Depois de pensar um pouco mais sobre isso, cheguei à conclusão de que, se alguém quiser usar seu projeto com uma versão mais antiga do NPM (anterior à 5.x), ainda assim instalará todas as dependências, mas com versões menos precisas (versões de patch)

Omri Luzon
fonte
3
link
Lakshmipriya Mukundan

Respostas:

103

Você precisa de ambos package-lock.jsone package.json? Não .

Você precisa do package.json? Sim .

Você pode ter um projeto apenas com o package-lock.json? Não .

Ele package.jsoné usado para mais do que dependências - como definir propriedades do projeto, descrição, informações sobre autor e licença, scripts etc. Ele package-lock.jsoné usado apenas para bloquear dependências para um número de versão específico.

Markus Stefanko
fonte
19

package-lock.json: registra a versão exata de cada pacote instalado que permite reinstalá-los. Instalações futuras poderão criar uma árvore de dependência idêntica.

package.json: registra a versão mínima necessária para o seu aplicativo. Se você atualizar as versões de um pacote específico, a alteração não será refletida aqui.

Narendar Reddy M
fonte
1
Se o exposto acima for verdadeiro e package.jsonregistrar a versão mínima necessária ao aplicativo e o package-lock.json registra a versão exata de cada pacote instalado, então estou tendo uma situação estranha em que um módulo está definido na versão 0.112.1 no pacote .json e 0.110.0 no pacote-lock.json ...
Jean-François Beauchamp
6

Se sua pergunta é se o arquivo de bloqueio deve ser confirmado no seu controle de origem - deve. Será ignorado sob certas circunstâncias.

Eu achei incômodas solicitações pull e histórico de confirmação, portanto, se você vê isso mudar, faça um commit separado.

Stanley Kirdey
fonte
1
Não, eu não estava perguntando sobre confirmações no controle de origem. Apenas se o NPM precisar dos dois ao mesmo tempo para trabalhar. package-lock.jsonparece ser uma versão mais detalhada package.json, por isso é seguro ou possível usar apenas o arquivo de bloqueio.
Omri Luzon
Entendo, deixei o package.json em meus projetos, principalmente para ter um lugar para scripts npm.
9788 Stanley Kirdey
1
Agora existe uma pergunta separada sobre se você deve colocar o package-lock.jsoncontrole de versão.
Adrian W
0

Uma explicação mais precisa e detalhada da razão por trás da manutenção do package-lock.json pode ser encontrada aqui

Vivek Goel
fonte