npm 5 werd vandaag vrijgegeven en een van de nieuwe functies omvat deterministische installaties met de creatie van een package-lock.json
bestand.
Wordt dit bestand verondersteld te worden bewaard in bronbeheer?
Ik neem aan dat het vergelijkbaar is met yarn.lock
en composer.lock
, die beide worden verondersteld te worden bewaard in de broncontrole.
Ja, package-lock.json
is bedoeld om te worden ingecheckt in bronbeheer. Als je npm 5 gebruikt, kun je dit zien op de opdrachtregel: created a lockfile as package-lock.json. Je zou dit bestand moeten committen.
Volgens npm help package-lock.json
:
package-lock.json
wordt automatisch gegenereerd voor alle bewerkingen waarbij npm denode_modules
tree wijzigt, ofpackage.json
. Het beschrijft de exacte boom die werd gegenereerd, zodat volgende installaties in staat zijn om identieke bomen kunnen genereren, ongeacht tussentijdse updates van afhankelijkheden.
Dit bestand is bedoeld om gecommit te worden in de broncode repositories, en dient verschillende doelen:
- Beschrijf een enkele representatie van een dependency tree zodat teammates, deployments, en continuous integration gegarandeerd exact dezelfde dependencies installeren.
- Het bieden van een mogelijkheid voor gebruikers om te "time-travelen" naar eerdere toestanden van
node_modules
zonder de directory zelf te hoeven committen.
- Het vergemakkelijken van een betere zichtbaarheid van veranderingen in de boom door leesbare bron controle diffs.
- En het optimaliseren van het installatieproces door npm toe te staan herhaalde metadata resoluties over te slaan voor eerder geïnstalleerde pakketten.
Een belangrijk detail over
package-lock.json
is dat het niet gepubliceerd kan worden, en het zal worden genegeerd als het op een andere plaats wordt gevonden dan in het toplevel pakket. Het deelt een formaat met npm-shrinkwrap.json(5), wat in essentie hetzelfde bestand is, maar het staat publicatie toe. Dit wordt niet aanbevolen tenzij je een CLI tool inzet of anderszins het publicatieproces gebruikt voor het produceren van productiepakketten.
Als zowel
package-lock.json
alsnpm-shrinkwrap.json
aanwezig zijn in de root van een pakket aanwezig zijn, zalpackage-lock.json
volledig genegeerd worden.
Ja, je kunt dit bestand committen. Van de npm's officiële docs:
package-lock.json
wordt automatisch gegenereerd voor elke bewerking waarbijnpm
ofwel denode_modules
tree, ofwelpackage.json
wijzigt. Het beschrijft de exacte boom die werd gegenereerd, zodat volgende installaties in staat zijn om identieke bomen te genereren, ongeacht tussentijdse updates van afhankelijkheden.Dit bestand is bedoeld om gecommit te worden in bron repositories[.]