npm 5 è stato rilasciato oggi e una delle nuove caratteristiche include le installazioni deterministiche con la creazione di un file package-lock.json
.
Questo file dovrebbe essere tenuto nel controllo dei sorgenti?
Presumo che sia simile a yarn.lock
e composer.lock
, entrambi i quali dovrebbero essere tenuti nel controllo della fonte.
Sì, package-lock.json
è destinato ad essere controllato nel controllo dei sorgenti. Se stai usando npm 5, potresti vedere questo sulla linea di comando: created a lockfile as package-lock.json. Dovresti fare il commit di questo file.
Secondo npm help package-lock.json
:
package-lock.json
viene generato automaticamente per ogni operazione in cui npm
modifica l'albero node_modules
o package.json
. Esso descrive l
esattamente l'albero che è stato generato, in modo che le successive installazioni siano in grado di
generare alberi identici, indipendentemente dagli aggiornamenti intermedi delle dipendenze.
Questo file è destinato ad essere inserito nei repository dei sorgenti**, e serve vari scopi:
- Descrivere una singola rappresentazione di un albero delle dipendenze tale che i compagni di squadra, le distribuzioni e l'integrazione continua sono garantiti per installare esattamente le stesse dipendenze.
- Fornire una struttura per gli utenti per "viaggiare nel tempo" a stati precedenti di
node_modules
senza dover impegnare la directory stessa.
- Facilitare una maggiore visibilità dei cambiamenti dell'albero attraverso diff leggibili dal controllo dei sorgenti.
- E ottimizzare il processo di installazione permettendo a npm di saltare ripetute risoluzioni di metadati per pacchetti precedentemente installati.
Un dettaglio chiave su package-lock.json
è che non può essere pubblicato, e
sarà ignorato se trovato in qualsiasi posto che non sia il pacchetto toplevel. Condivide
un formato con npm-shrinkwrap.json(5), che è essenzialmente lo stesso file, ma
permette la pubblicazione. Questo non è raccomandato a meno che non si distribuisca uno strumento CLI o
non si utilizzi il processo di pubblicazione per produrre pacchetti di produzione.
Se sia package-lock.json
che npm-shrinkwrap.json
sono presenti nella root di
un pacchetto, package-lock.json
sarà completamente ignorato.
Sì, puoi impegnare questo file. Dal npm's official docs:
package-lock.json
viene generato automaticamente per ogni operazione in cui npm
modifica l'albero node_modules
o package.json
. Descrive l'esatto albero che è stato generato, in modo che le successive installazioni siano in grado di generare alberi identici, indipendentemente dagli aggiornamenti intermedi delle dipendenze.
Questo file è destinato ad essere impegnato nei repository dei sorgenti[.]