npm (Node Package Manager), üçüncü taraf paketleri (bağımlılıkları) yüklemek ve yönetmek ve proje scriptlerini çalıştırmak için Node'un varsayılan aracıdır. İki dosya bir projeyi tanımlar: package.json (manifest) ve package-lock.json (tam bağımlılık ağacı).
package.json — proje manifestosu
{
"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"
}
}
Metaveri, script'ler ve bağımlılıkları kaydeder. ^4.18.0 bir semver aralığı — ^ uyumlu küçük/yama güncellemelerine izin verir (4.x.x ama 5.0.0 değil).
lockfile — kesin, tekrarlanabilir yüklemeler
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)
Lockfile, yüklenen her paketin (geçişli bağımlılıklar dahil) tam sürümünü sabitleştirir. Bu, takımdaki herkese — ve CI'ye, ve production'a — özdeş bağımlılık ağacını garantiler ve sürüm kayması nedeniyle "works on my machine" hatalarını önler.
Anahtar komutlar
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 (npm install yerine) lockfile'dan kesin olarak yükler ve onu değiştirmez — CI/production tekrarlanabilirliği için doğru komut.
Neden önemli
✓ ALWAYS commit package-lock.json → reproducible installs across the team & CI
npm ve bu iki dosya her Node projesinin temeli.
package.json (dependencies vs devDependencies, semver aralıkları, script'ler) ve özellikle lockfile'ın neden var olduğunu (deterministic, reproducible installs of the entire dependency tree) anlamak gereklidir — lockfile'ı commit etmek ve CI'de npm ci kullanmak, takım arkadaşlarının veya production'ın farklı paket sürümleri almasından kaynaklanan İnce, hata ayıklaması zor olan hataları önler.
