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.