Existe uma maneira de forçar o npm a gerar o package-lock.json?

132

Excluí por acidente e fiz muitas alterações package.jsondesde então. Um npm installou npm updatenão gera package-lock.jsonmais. Tentei limpar meu cache npm e meu cache nvm, mas nada parece estar funcionando. Eu tentei em várias versões do Node.js (6.10.3 Node.js - 3.10.10 npm é o que eu gostaria que funcionasse), e não funciona em nenhum.

Existe uma maneira de forçar o npm a gerar o package-lock.jsonarquivo?

Muito dinheiro
fonte
2
Acho que package-lock.json é específico para npm 5
Brett Merrifield,
3
package-lock.jsoné gerado automaticamente por padrão no npm a partir da v5, nas versões anteriores, o nome do arquivo de bloqueio era npm-shrinkwrap.jsone era gerado manualmente usando o npm shrinkwrapcomando.
alexmac,
@BrettMerrifield Obrigado! Esse era o meu problema. Eu atualizei para node 8.6.0e com ele npm 5.3.0e funcionou.
Big Money,
Verifique o seu .gitignore. Eu acidentalmente tinha package-lock.jsonna .gitignorede alguma forma e, porque package-lock.jsonnão estava aparecendo no git statusque estava me jogando fora.
Joshua Pinter

Respostas:

155

Por padrão, package-lock.jsoné atualizado sempre que você executa npm install. No entanto, este pode ser desativado globalmente definindo package-lock=falseno ~/.npmrc.

Quando a package-lock=falseconfiguração global está ativa, você ainda pode forçar package-lock.jsona atualização de um arquivo de projeto executando:

npm install --package-lock

Este comando é a única maneira infalível de forçar uma package-lock.jsonatualização.

Mathias Bynens
fonte
@RonNewcomb Você pode compartilhar mais informações? O que você quer dizer com "não funciona"? Qual versão npm você está usando?
Mathias Bynens
npm versão 3.10.10 Nó 6.10.3 O comando listado parece ser autônomo? Nada acontece. Nenhum erro, nenhuma mudança de arquivo, nada.
Ron Newcomb
2
Se você estiver usando o npm v3 para o seu projeto, não terá um package-lock.json. package-lock.jsonsó é compatível com npm v5 +.
Mathias Bynens
8
npm v 6.4.1 e isso não cria package-lock.json
mjuopperi
1
Funciona para mim, em 6.4.1. Definir como false também impede que crie um.
Kevin B
94

No npm 6.x você pode usar

npm i --package-lock-only

De acordo com https://docs.npmjs.com/cli/install.html

O argumento --package-lock-only atualizará apenas o package-lock.json, em vez de verificar node_modules e baixar dependências.

Janusz Przybylski
fonte
12
Esta é a resposta correta agora, outras são antigas e não funcionam.
Vaibhav Singh
Alguma pista de como gerar um package-lock.json sem devDependencies? Eu preciso disso para instalações de produção limpa. npm i --package-lock-only --only=productionnão parece funcionar.
Robert
Não acho que seja possível gerar package-lock.jsonapenas para dependências de produção. Mas se você executá- npm i --only=productionlo deve instalar apenas dependências de produção. Portanto, seu processo de compilação pode ser assim: instalar todas as dependências, compilar o aplicativo, remover node_modulese instalar apenas dependências de produção.
Janusz Przybylski
14

Isso é respondido nos comentários; package-lock.jsoné um recurso da npmv5 e superior. npm shrinkwrapé como você cria um arquivo de bloqueio em todas as versões do npm.

LJHarb
fonte
1
observe, entretanto, que package-lock.jsons não são exatamente a mesma coisa que arquivos shrinkwrap.
strugee
7
no npm 5+, eles são, de fato, exatamente os mesmos, em todos os detalhes, exceto por uma coisa: npm-shrinkwrap.jsonserão publicados no registro e package-lock.jsonnão serão.
LJHarb
6
Sim. Essa é uma diferença muito importante, por isso deixei meu comentário.
strugee
1
npm shrinkwrapgera npm-shrinkwrap.json, mas como você gera package-lock.json?
Vic
5
É automático em npm 5+, ou você pode forçá-lo em 5+ com--package-lock
LJHarb
1

Como várias respostas explicaram, você deve executar:

npm i

MAS se não resolver ...

Verifique a versão do seu npmexecutável. (Para mim foi 3.xx que não usa o package-lock.json(em absoluto))

npm -v

Deve ser pelo menos 5.xx (que introduziu o arquivo package-lock.json).

Para atualizar o npm no Lunix, siga estas instruções.

Para mais detalhes sobre os arquivos do pacote, leia esta história média .

Betontalpfa
fonte
0

Se a sua versão npm for inferior à versão 5 , instale a versão superior para obter a geração automática de package-lock.json .

Exemplo: atualize seu npm atual para a versão 6.14.0

npm i -g npm@6.14.0

Você pode ver a lista de versões mais recentes do npm

npm view npm versions
SridharKritha
fonte
-3

package-lock.json é gerado novamente sempre que você executa npm i.

Mcanic
fonte
13
Isso só é verdadeiro para certas versões de nodee npm. Acho que é npm> = 5.0e node> = 7.0, mas não tenho 100% de certeza disso. Não funciona node 6.11.3comigo.
Thor84no
2
Também não é verdadeiro se o bloqueio do pacote estiver definido como falso na configuração do npm. Use 'npm config list' para verificar
Damo
package-lock.json é gerado automaticamente para qualquer operação onde o npm modifica a árvore node_modules ou package.json. Acorrding para docs.npmjs.com/files/package-lock.json . Mas a versão npm não é especificada.
NanoNova