C'è un modo per forzare npm a generare package-lock.json?


132

L'ho cancellato per sbaglio e ho apportato molte modifiche a package.json . Un npm installo npm updatenon generare package-lock.jsonpiù. Ho provato a svuotare la mia cache npm e la mia cache nvm, ma niente sembra funzionare. L'ho provato su diverse versioni di Node.js (6.10.3 Node.js - 3.10.10 npm è quello su cui vorrei che funzionasse) e non funziona su nessuno.

C'è un modo per forzare npm a generare il file package-lock.json file?


2
Penso che package-lock.json sia specifico per npm 5
Brett Merrifield

3
package-lock.jsonsta generando automaticamente per impostazione predefinita in npm a partire dalla v5, nelle versioni precedenti, il nome del file di blocco era npm-shrinkwrap.jsoned era generato manualmente utilizzando il npm shrinkwrapcomando.
alexmac

@BrettMerrifield Grazie! Questo era il mio problema. Ho aggiornato node 8.6.0e con esso npm 5.3.0e ha funzionato.
Big Money

Controlla il tuo .gitignore. Ho avuto accidentalmente package-lock.jsonin .gitignorequalche modo e perché package-lock.jsonnon si presentava nel git statusmi stava buttando fuori.
Joshua Pinter

Risposte:


156

Per impostazione predefinita, package-lock.jsonviene aggiornato ogni volta che si esegue npm install. Tuttavia, questo può essere disabilitato a livello globale impostando package-lock=falsein~/.npmrc .

Quando l' package-lock=falseimpostazione globale è attiva, è comunque possibile forzare l' package-lock.jsonaggiornamento del file di un progetto eseguendo:

npm install --package-lock

Questo comando è l'unico modo sicuro per forzare un package-lock.jsonaggiornamento.


@RonNewcomb Puoi condividere maggiori informazioni? Cosa intendi con "non funziona"? Quale versione di npm stai usando?
Mathias Bynens

npm versione 3.10.10 Nodo 6.10.3 Il comando che hai elencato sembra essere un no-op? Non succede niente. Nessun errore, nessun cambio di file, niente.
Ron Newcomb

2
Se stai usando npm v3 per il tuo progetto, non avresti un file package-lock.json. package-lock.jsonè supportato solo da npm v5 +.
Mathias Bynens

8
npm v 6.4.1 e questo non crea package-lock.json
mjuopperi

1
Per me funziona, in 6.4.1. Impostarlo su false impedisce anche di crearne uno.
Kevin B

94

In npm 6.x puoi usare

npm i --package-lock-only

Secondo https://docs.npmjs.com/cli/install.html

L'argomento --package-lock-only aggiornerà solo il pacchetto-lock.json, invece di controllare node_modules e scaricare le dipendenze.


12
Questa è la risposta corretta ora, altri sono vecchi e non funzioneranno.
Vaibhav Singh

Qualche idea su come generare un pacchetto-lock.json senza devDependencies? Ne ho bisogno per installazioni di produzione pulite. npm i --package-lock-only --only=productionnon sembra funzionare.
Robert

Non credo sia possibile generare package-lock.jsonsolo per dipendenze di produzione. Ma se lo esegui npm i --only=productiondovrebbe installare solo le dipendenze di produzione. Quindi il tuo processo di compilazione potrebbe assomigliare a questo: installa tutte le dipendenze, crea app, rimuovi node_modulese installa solo le dipendenze di produzione.
Janusz Przybylski

14

Questo è risposto nei commenti; package-lock.jsonè una funzionalità in npmv5 e versioni successive. npm shrinkwrapè il modo in cui crei un file di blocco in tutte le versioni di npm.


1
nota, tuttavia, che package-lock.jsoni file non sono esattamente la stessa cosa dei file con contorno semplificato.
strugee

7
in npm 5+ sono, infatti, esattamente gli stessi, fin nei minimi dettagli, tranne che per una cosa: npm-shrinkwrap.jsonverranno pubblicati nel registro e package-lock.jsonnon lo saranno.
LJHarb

6
Sì. Questa è una differenza piuttosto importante, motivo per cui ho lasciato il mio commento.
strugee

1
npm shrinkwrapgenera npm-shrinkwrap.json, ma come si genera package-lock.json?
Vic

5
È automatico in npm 5+, oppure puoi forzarlo in 5+ con--package-lock
LJHarb

1

Come spiegato da diverse risposte, dovresti eseguire:

npm i

MA se non risolve ...

Controlla la versione del tuo npmeseguibile. (Per me era 3.xx che non usa package-lock.json(affatto))

npm -v

Dovrebbe essere almeno 5.xx (che ha introdotto il file package-lock.json.)

Per aggiornare npm su Lunix segui queste istruzioni.

Per maggiori dettagli sui file del pacchetto, leggi questo articolo.


0

Se la tua versione di npm è inferiore alla versione 5, installa la versione superiore per ottenere la generazione automatica di package-lock.json .

Esempio: aggiorna il tuo attuale npm alla versione 6.14.0

npm i -g npm@6.14.0

È possibile visualizzare l' elenco delle versioni più recenti di npm tramite

npm view npm versions

-3

package-lock.json viene rigenerato ogni volta che si esegue npm i.


13
Questo è vero solo per alcune versioni di nodee npm. Penso che sia npm> = 5.0e node> = 7.0, ma non ne sono sicuro al 100%. Non funziona con node 6.11.3me.
Thor84no

2
Inoltre non è vero se il blocco del pacchetto è impostato su false nella configurazione di npm. Usa 'npm config list' per controllare
Damo

package-lock.json viene generato automaticamente per qualsiasi operazione in cui npm modifica l'albero node_modules o package.json. Passaggio a docs.npmjs.com/files/package-lock.json . Ma la versione npm non è specificata.
NanoNova,
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.