npm (Node Package Manager) a Node alapértelmezett eszköze harmadik fél csomagjainak (dependencies) telepítésére és kezelésére, valamint projekt parancsfájlok futtatására. Két fájl definiál egy projektet: package.json (a manifest) és package-lock.json (a pontos függőségi fa).
package.json — projekt manifest
{
"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"
}
}
Metaadatokat, parancsfájlokat és függőségeket rögzít. A ^4.18.0 egy semver tartomány — a ^ kompatibilis kisebb/javított frissítéseket engedélyez (4.x.x, de nem 5.0.0).
A lockfile — pontos, reprodukálható telepítések
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)
A lockfile a telepített minden csomag (az átviteli függőségeket is beleértve) pontos verzióját rögzíti. Ez garantálja, hogy a csapat minden tagja — és a CI, valamint az éles — azonos függőségi fát kap, megakadályozva a "működik az én gépemen" hibákat a verziók eltolódásából.
Kulcs parancsok
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
Az npm ci (szemben az npm install-tal) szigorúan a lockfile-ból telepít anélkül, hogy módosítaná — a CI/éles reprodukálhatóság helyes parancsai.
A lockfile véglegesítése
✓ ALWAYS commit package-lock.json → reproducible installs across the team & CI
Miért számít
Az npm és ez a két fájl minden Node projekt alapja.
Az package.json megértése (dependencies vs devDependencies, semver tartományok, parancsfájlok) és különösen az, hogy miért létezik a lockfile (determinisztikus, reprodukálható az egész függőségi fa telepítése) elengedhetetlen — a lockfile véglegesítése és az npm ci használata a CI-ben megakadályozza a finom, nehezen hibakeresendő hibákat, amelyeket a csapattársak vagy az éles termelés okozhat a csomagok eltérő verzióival.
