npm (Node Package Manager) je výchozí nástroj Node pro instalaci a správu balíčků třetích stran (závislostí) a spouštění skriptů projektu. Dva soubory definují projekt: package.json (manifest) a package-lock.json (přesný strom závislostí).
package.json — manifest projektu
{
"name": "my-app",
"version": "1.0.0",
"type": "module",
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js",
"test": "vitest"
},
"dependencies": { // needed at RUNTIME
"express": "^4.18.0"
},
"devDependencies": { // needed only for DEVELOPMENT (testing, building)
"vitest": "^1.0.0"
}
}
Zaznamenává metadata, skripty a závislosti. ^4.18.0 je semver rozsah — ^ umožňuje kompatibilní aktualizace minor/patch (4.x.x, ale ne 5.0.0).
Soubor zámku — přesné, reprodukovatelné instalace
package.json says: express ^4.18.0 (a RANGE — could install 4.18.0 or 4.19.2...)
package-lock.json: express 4.18.2 (the EXACT version + every nested dependency)
Soubor zámku připevňuje přesnou verzi každého balíčku (včetně tranzitivních závislostí), který byl nainstalován. To zaručuje, že všichni v týmu — a CI, a produkce — získají identický strom závislostí, což zabraňuje chybám "funguje na mém počítači" způsobeným posunem verzí.
Klíčové příkazy
npm install # install all deps from package.json (updates lockfile)
npm install express # add a dependency
npm install -D vitest # add a devDependency
npm ci # install EXACTLY from the lockfile (used in CI — fast, strict)
npm run dev # run a script defined in package.json
npm ci (oproti npm install) instaluje striktně ze souboru zámku bez jeho úprav — správný příkaz pro reprodukovatelnost CI/produkce.
Potvrdit soubor zámku
✓ ALWAYS commit package-lock.json → reproducible installs across the team & CI
Proč na tom záleží
npm a tyto dva soubory jsou základem každého projektu Node.
Porozumění package.json (závislosti vs devDependencies, semver rozsahy, skripty) a obzvláště proč soubor zámku existuje (deterministické, reprodukovatelné instalace celého stromu závislostí) je zásadní — potvrzení souboru zámku a použití npm ci v CI zabraňuje jemným, těžko laditelným chybám způsobeným tím, že kolegové nebo produkce získají různé verze balíčků.
