npm (Node Package Manager), Node.js platformu için standart paket yöneticisidir ve Node.js kurulumuna dahildir. npm, JavaScript ve TypeScript projelerinin bağımlılıklarını yönetir: kitaplıkları node_modules'a yükler, paket sürümlerini günceller, sürüm çakışmalarını çözer. package.json, meta veriler ve bağımlılık listesi içeren merkezi yapılandırma dosyasıdır. npm Registry, en büyük paket kaydıdır. Daha fazla bilgi için npm Registry'yi ziyaret edin.
Önemli Noktalar
npm, 2010 yılında Isaac Schlueter tarafından Node.js bağımlılık yönetimi için bir çözüm olarak oluşturuldu. 2014'ten beri npm, npm, Inc. tarafından yönetilmektedir ve 2020'de Microsoft/GitHub tarafından satın alınmıştır. Araç iki bölümden oluşur: paketleri yüklemek ve yönetmek için CLI (komut satırı) ve registry.npmjs.org adresindeki tüm yayınlanmış modüllerin merkezi deposu olan Registry.
npm Registry en büyük paket kaydıdır: 2 milyondan fazla paket ve aylık 10 milyardan fazla indirme. Her paketin bir SemVer sürümü, açıklaması, bağımlılıkları, lisansı ve yazarlığı vardır. Kendi paketinizi yayınlamak npm publish ile yapılır. npm, kuruluşlar için kapsamlı paketleri (@scope/package), özel kayıtları ve yerleşik güvenlik denetimini destekler.
Node.js sürüm 18+, gelişmiş performansa sahip npm 9+, monorepo'lar için çalışma alanları ve yeniden tasarlanmış eş bağımlılık mekanizması içerir. npm ekosistemi, sunucu taraflı JavaScript, ön yüz (React, Vue, Angular), mobil geliştirme (React Native), derleme araçları (Webpack, Vite) ve CLI yardımcı programlarını kapsar. npm, JavaScript kitaplıklarının birincil dağıtım kanalıdır.
npm install — tüm bağımlılıkları node_modules'a yüklemek için package.json ve package-lock.json'ı okuyan ana komuttur. İlk çalıştırmada npm, bağımlılık grafiğini hesaplar, sürüm çakışmalarını çözer ve package-lock.json'ı oluşturur. npm install <package> komutu belirli bir paketi yükler; --save-dev bayrağı onu devDependencies'e ekler, --global ise genel olarak yükler.
npx — npm sürüm 5.2'den itibaren dahil edilen bir paket çalıştırıcısıdır. npx, genel kurulum olmadan CLI yardımcı programlarını çalıştırmaya olanak tanır: npx react-native init veya npx create-react-app my-app. npx, paketi geçici bir önbelleğe indirir, çalıştırır ve tamamlandıktan sonra temizler. npx ayrıca belirli araç sürümlerini çalıştırmak için de kullanışlıdır.
npm audit, npm veritabanındaki bilinen güvenlik açıkları için bağımlılık ağacını tarar. Komut, önem düzeylerine (critical, high, moderate) sahip bir rapor çıkarır ve güvenlik açığı bulunan paketleri otomatik olarak güncellemek için npm audit fix önerir. npm cache, indirilen paketleri yerel olarak depolar. npm cache clean --force, kurulum sorunlarında önbelleği temizler. npm outdated, güncel olmayan paketleri gösterir.
# Temel npm komutları
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Genel kurulum olmadan çalıştırma
$ npx react-native init MyApp
# Güvenlik denetimi
$ npm audit --fix
package.json, proje kökünde meta verilerini, bağımlılıklarını ve yapılandırmasını açıklayan bir JSON dosyasıdır. Zorunlu alanlar: name (benzersiz paket adı) ve version (SemVer sürümü, örn. 1.0.0). Dosya, hızlı başlatma için npm init -y ile veya manuel olarak oluşturulur.
Semantic Versioning (SemVer), MAJOR.MINOR.PATCH biçiminde bir sürümleme standardıdır. Ana sürüm, uyumsuz API değişikliklerinde değişir, alt sürüm — işlevsellik eklerken (geriye dönük uyumlu), yama — hata düzeltmelerinde. Sürümden önceki ^ sembolü, alt sürüm ve yama güncellemelerine izin verir, ~ ise yalnızca yama güncellemelerine izin verir.
{
"name": "my-app",
"version": "1.0.0",
"private": true,
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios"
},
"dependencies": {
"react": "^18.3.0",
"react-native": "^0.76.0"
},
"devDependencies": {
"typescript": "^5.5.0",
"@types/react": "^18.3.0"
}
}
| Alan | Amaç | Örnek Değer |
|---|---|---|
| scripts | npm run için çalıştırma komutları | "start": "node index.js" |
| dependencies | Uygulamanın üretim bağımlılıkları | "react": "^18.3.0" |
| devDependencies | Geliştirme ve test araçları | "jest": "^29.7.0" |
| peerDependencies | Kitaplıklar için ana bilgisayar bağımlılıkları | "react": ">=17.0.0" |
| engines | Node.js sürüm gereksinimleri | {"node": ">=18.0.0"} |
React Native projeleri, bağımlılık yönetimi için npm'i aktif olarak kullanır. Standart set, react, react-native, gezinme kitaplıkları (React Navigation), HTTP kitaplıkları (axios), durum yönetimi (Redux, Zustand) ve UI bileşenlerini içerir. npm, kayıttan binlerce uyumlu paket yüklemeye olanak tanır.
npx pod-install — iOS için React Native'de yerel modüller yüklendikten sonra gerekli bir komuttur. npm, package-lock.json'a dayalı olarak otomatik olarak bir Podfile.lock oluşturur. Expo projelerinde npm install yerine expo install kullanılır çünkü mevcut Expo SDK sürümüyle uyumlu sürümleri seçer.
Sürüm çakışmaları React Native'de yaygın bir sorundur: react-native-reanimated, react-native-gesture-handler ve react-native-safe-area-context uyumlu sürümler gerektirir. Çözüm, tüm paketleri en son uyumlu sürümlere güncellemek veya --legacy-peer-deps kullanmaktır. package-lock.json, CocoaPods ve Gradle aracılığıyla derlenen yerel modüller için kritiktir.
npm, Node.js ile birlikte gelen standart paket yöneticisidir. Ana alternatifler: yarn (2016'da Facebook tarafından oluşturuldu) ve pnpm (hızlı, sabit bağlantılarla). npm 5'ten bu yana, npm ve yarn arasındaki hız ve işlevsellik farkı minimumdur. npm 7+, çalışma alanları ekleyerek onu monorepo'lar için rekabetçi hale getirdi.
| Özellik | npm | yarn | pnpm |
|---|---|---|---|
| Oluşturulma yılı | 2010 | 2016 | 2017 |
| Kilit dosyası | package-lock.json | yarn.lock | pnpm-lock.yaml |
| Kurulum | Sıralı (npm 5+) | Paralel | Paralel |
| Disk alanı | Standart | Standart | Minimum (bağlantılar) |
| Çalışma alanları | Evet (npm 7+) | Evet | Evet |
| Plug'n'Play | Hayır | Evet | Hayır |
State of JS 2025'e göre: Geliştiricilerin %62'si npm kullanıyor, %35'i yarn (çoğunlukla eski projeler ve PnP meraklıları) ve %3'ü pnpm kullanıyor. React Native projeleri için her iki araç da eşit derecede uygundur, ancak npm, Expo SDK 50+ ve yeni React Native başlatmalarını kullanan projelerde daha yaygındır.
yarn, daha olgun çalışma alanı uygulaması ve Plug'n'Play sayesinde son derece büyük monorepo'larda (100+ paket) avantajını korur. pnpm, genel bir depoya sabit bağlantılar yoluyla disk alanı tasarrufunda kazanır. Yönetici seçimi, ekip tercihlerine ve altyapıya bağlıdır.
Sıkça Sorulan Sorular
npm install, package-lock.json'ı günceller ve anlamsal aralık içinde yeni alt sürümler yükleyebilir. npm ci (Clean Install), node_modules'u kaldırır ve package-lock.json'dan paketleri onu güncellemeden sıkı bir şekilde yükler. npm ci daha hızlıdır, CI/CD'de kullanılır ve tüm makinelerde aynı ortamı garanti eder. package-lock.json eksikse, npm ci hata verir.
npm 7'den itibaren, eş bağımlılık çakışmaları derleme hatalarına neden olur. Çözümler: npm update ile tüm paketleri uyumlu sürümlere güncellemek, npm 6 modu için --legacy-peer-deps bayrağını kullanmak veya belirli bir paketin sürümünü zorlamak için package.json'a overrides bölümü eklemek. En iyi seçenek, bağımlılıkları uyumlu sürümlere güncellemektir.
npm audit, npm Security Advisory veritabanındaki bilinen güvenlik açıkları için bağımlılık ağacını tarar. Komut, önem düzeyi (critical, high, moderate, low) ile bir rapor çıkarır ve güvenlik açığı bulunan paketleri güvenli sürümlere otomatik olarak güncellemek için npm audit fix önerir. Düzenli olarak npm audit çalıştırmak, JavaScript projeleri için temel bir güvenlik uygulamasıdır.
npm çalışma alanları, tek bir depoda birden çok paketi yönetmeye olanak tanır. Kök package.json'a "workspaces": ["packages/*"] alanını ekleyin. Avantajlar: paylaşılan bir node_modules'a tüm bağımlılıkların tek kurulumu, yerel paketler arasında otomatik sembolik bağlantılar, kökten tüm paketler için betik çalıştırma ve sürüm tekrarını ortadan kaldırma.
package-lock.json, tüm bağımlılıkların ve bunların geçişli paketlerinin tam sürümlerini kilitler. Bu olmadan, farklı geliştiriciler ve CI sunucuları, anlamsal aralık içinde farklı kitaplık sürümleri alabilir ve bu da «benim makinemde çalışıyor» hatalarına yol açar. Kilit dosyasını kaydetmek, tekrarlanabilir derlemeleri ve tüm ortamlarda aynı davranışı garanti eder.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.