Co je hernajs ten package-lock.json
, který se vám objevuje v hlavní složce repozitáře, když používáte balíčkovací manažer NPM?
Jedná se o soubor, který uchovává přesné informace o instalovaných balíčcích. Vedle package.json je to klíčový prvek definice závislostí projektu. A stejně jako tenhle jeho brácha by měl být commitovaný do repozitáře. Na rozdíl od něj se ale neupravuje ručně.
Související
V NPM se package-lock.json
používá od verze 5. „Lockfile“ je poměrně nová věc, převzatá z konkurenčního nástroje Yarn.
K čemu to přesně je?
Vyjdu z oficiální dokumentace. package-lock.json
má následující cíle:
- Zpřístupnit strom závislostí a jeho změny v čase všem vývojářům v týmu, ale také strojům - mašinám pro deployment, continuous integration…
- Popsat strom závislostí v daném okamžiku.
- Poskytnout možnost vrátit se v čase k určité verzi stromu závislostí.
- Optimalizovat instalační proces tím, že jeho existence NPM dovolí přeskakovat již existující položky.
Rozdíly mezi package.json a package-lock.json?
- První definuje předpis, druhý popisuje realitu.
- První neřeší strom závislostí, druhý jej vytváří.
- První se běžně ručně upravuje, u druhého by se to obvykle dělat nemělo.
Ukázka a popis vlastností
Vezměme, že v package.json
definuji tuhle závislost:
"devDependencies": {
"less": "^3.7.0",
}
Dle sémantického verzování tedy chci verzi 3.7.0
a výše s tím, že je možné aktualizovat minor – takže cokoliv kromě prvního čísla.
A teď ten hlavní problém, který „lockfile“ řeší: Je totiž možné, že jeden člen týmu bude mít nainstalovanou verzi 3.7.0
a jiný pak 3.8.1
. Obojí bude vyhovovat předpisu. Vždy podle data, ve kterém si závislosti instalovali – například přes npm install
.
package-lock.json
tohle sjednocuje. Je to soubor, který automaticky vygeneruje NPM, takže do něj asi nemusíte koukat. My si tu ale jeden záznam rozebereme, abychom zkusili pochopit, co se uvnitř odehrává:
"less": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/less/-/less-3.8.1.tgz",
"integrity": "sha512-8HFGuWmL3FhQR0aH89escFNBQH/nEiYPP2ltDFdQw2chE28Yx2E3lhAIq9Y2saYwLSwa699s4dBVEfCY8Drf7Q==",
"dev": true,
"requires": {
"clone": "^2.1.2",
"errno": "^0.1.1"
},
"dependencies": {
"clone": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
"integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
"dev": true
}
}
}
Co tenhle zjednodušený záznam pro balíček preprocesoru LESS ukazuje?
version
– verze balíčku.resolved
– adresa, odkud se tahle verze naposledy stahovala.integrity
– bezpečnostní kód, který ověřuje, zda je balíček stahovaný z adresy bez manipulací nějakého padoucha.dev
– hodnotatrue
označuje vývojářské závislosti. VizdevDependencies
v package.json.requires
– závislosti specifikované v package.json.dependencies
– reálně instalované závislosti. (Rozdíly mezirequires
adependencies
popisuje tahle odpověď na Stack Overflow.)
Už to dává smysl? Více informací o „lockfile“ je v dokumentaci NPM.
Komentáře
Máte doplnění, komentář nebo jste našli chybu?
Pro přidání názoru se prosím
přihlaste nebo si zřiďte účet.