Modern web geliştirme süreçlerinde sıfırdan her şeyi kendimiz yazmak yerine, topluluk tarafından geliştirilmiş ve test edilmiş hazır kod bloklarını kullanırız. JavaScript ekosisteminde bu iş birliğini ve modülerliği sağlayan en temel mekanizma paket yöneticileridir. Bu mekanizmanın merkezinde ise Node.js ile birlikte gelen npm yer alır.
npm Nedir ve Ne İşe Yarar?
Açılımı “Node Package Manager” olan npm, JavaScript programlama dili için geliştirilmiş varsayılan paket yönetim sistemidir. npm, geliştiricilerin yazdıkları kod bloklarını, kütüphaneleri ve araçları diğer geliştiricilerle paylaşmalarını sağlar. Aynı zamanda başkalarının yayınladığı açık kaynaklı paketleri kendi projelerinize saniyeler içinde dahil etmenize imkan tanır.
npm temel olarak iki ana parçadan oluşur:
- Çevrimiçi Depo (Registry): Milyonlarca açık kaynaklı JavaScript paketinin barındırıldığı geniş bir veritabanıdır.
- Komut Satırı Arayüzü (CLI): Bilgisayarınızın terminali üzerinden bu depoya erişmenizi, paket indirmenizi, güncellemenizi ve kendi paketlerinizi yayınlamanızı sağlayan konsol aracıdır.
Bir JavaScript projesinde tarih formatlama, veri şifreleme veya ağ istekleri yapma gibi ihtiyaçlar duyulduğunda sıfırdan algoritma yazmak yerine, npm üzerindeki güvenilir paketler projeye dahil edilir.
Node.js ve npm Kurulumu
npm, Node.js çalışma ortamı (runtime) ile birlikte paketlenmiş olarak gelir. Dolayısıyla sisteminize Node.js kurduğunuz anda npm de otomatik olarak terminalinizde kullanılabilir hale gelir.
Sisteminizde npm’in kurulu olup olmadığını ve hangi sürümün çalıştığını doğrulamak için terminale şu komutu yazabilirsiniz:
npm -v
Bu komut, sisteminizde aktif olan npm sürüm numarasını ekrana basar. Eğer bir sürüm numarası görüyorsanız aracınız kullanıma hazırdır.
Proje Başlatma: package.json Mantığı
Bir yazılım projesinde npm kullanmaya başlamak için projeyi npm ortamına tanıtmanız gerekir. Bunun için projenin kök dizininde package.json adlı bir dosya bulunmalıdır. Bu dosya; projenin adını, sürümünü, çalıştırılabilir komutlarını ve en önemlisi projenin ihtiyaç duyduğu bağımlılıkları (paketleri) listeler.
Yeni bir projede bu dosyayı oluşturmak için ilgili dizine gidip şu komutu çalıştırabilirsiniz:
npm init
Bu komut size proje adı, sürüm numarası, açıklama ve yazar gibi sorular sorar. Soruları varsayılan ayarlarla hızlıca geçmek ve anında bir dosya üretmek isterseniz -y parametresini ekleyebilirsiniz:
npm init -y
Oluşan package.json dosyası temel olarak aşağıdaki gibi bir yapıya sahip olur:
{
"name": "ornek-proje",
"version": "1.0.0",
"description": "npm calisma ornegi",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {},
"devDependencies": {}
}
Bağımlılık Türleri: dependencies ve devDependencies
npm projelerinde paketler kullanım amaçlarına göre ikiye ayrılır:
- dependencies: Projenin üretim ortamında (production) çalışması için zorunlu olan kütüphanelerdir. Örneğin bir web sunucusu çatısı (Express.js) buraya eklenir.
- devDependencies: Yalnızca geliştirme aşamasında (development) ihtiyaç duyulan test araçları, kod derleyiciler veya linter gibi araçlardır. Bu araçlar son kullanıcıya sunulan canlı kodun çalışması için gerekli değildir.
Temel npm Komutları
Paket yönetimini verimli kullanabilmek için terminalde sık kullanılan komutları bilmek gerekir.
Paket Kurulumu
Projenize bir paket eklemek istediğinizde install (veya kısaca i) komutunu kullanırsınız. Örneğin yaygın bir yardımcı fonksiyon kütüphanesi olan lodash paketini kuralım:
npm install lodash
Bu komut paketi indirir, node_modules klasörüne yerleştirir ve package.json dosyasındaki dependencies alanına otomatik olarak yazar.
Bir paketi yalnızca geliştirme bağımlılığı olarak kurmak isterseniz komutun sonuna --save-dev veya -D bayrağını eklersiniz:
npm install nodemon --save-dev
Paket Silme ve Güncelleme
Kullanmadığınız bir paketi projeden kaldırmak için uninstall komutu kullanılır:
npm uninstall lodash
Projeye dahil edilmiş paketlerin yeni sürümlerini kontrol edip güncellemek için ise şu komut çalıştırılır:
npm update
node_modules ve package-lock.json Dosyaları
npm ile bir paket indirdiğinizde projenizde iki yeni yapı oluşur:
- node_modules Klasörü: İndirdiğiniz kütüphanelerin ve o kütüphanelerin çalışması için gereken alt kütüphanelerin fiziksel kaynak kodlarının saklandığı yerdir. Bu klasör boyutu çok büyüyebildiği için kesinlikle Git gibi versiyon kontrol sistemlerine dahil edilmez;
.gitignoredosyasına eklenir. - package-lock.json Dosyası: Projenin kurulduğu andaki bağımlılık ağacının kesin ve değişmez bir anlık görüntüsünü tutar. Hangi paketin hangi tam sürümle (patch sürümüne kadar) indirildiğini kilitler. Bu dosya, projeyi başka bir bilgisayarda açan geliştiricinin
npm installyazdığında birebir aynı sürümleri almasını garanti eder. Bu nedenlepackage-lock.jsondosyası versiyon kontrol sistemine mutlaka dahil edilmelidir.
Güvenlik Perspektifinden npm
Açık kaynak paket kullanımı büyük bir hız kazandırsa da yazılım tedarik zinciri (supply chain) saldırıları açısından ciddi riskler barındırır. Projenize eklediğiniz her harici paket, projenizin güvenlik yüzeyini genişletir.
npm, bilinen güvenlik açıklarını tespit etmek için yerleşik bir denetim mekanizmasına sahiptir. Projenizdeki güvenlik açıklarını kontrol etmek için terminalden şu komutu çalıştırmalısınız:
npm audit
Bu komut, projenizdeki paketlerin sürümlerini bilinen güvenlik açığı veritabanlarıyla karşılaştırır ve risk seviyelerine göre bir rapor sunar. Eğer güvenli güncellemelerle giderilebilecek açıklar varsa şu komutla otomatik düzeltme uygulanabilir:
npm audit fix
Güvenlik açıklarından kaçınmak için indirme sayısı yüksek, aktif bakımı yapılan, GitHub üzerinde yıldız sayısı ve topluluk desteği güçlü olan güvenilir paketleri tercih etmek kritik bir kuraldır.
Özet ve Sonraki Adımlar
npm nedir sorusunun yanıtı yalnızca bir paket indirme aracıyla sınırlı değildir; JavaScript dünyasının modüler yapısını ayakta tutan devasa bir ekosistemdir. package.json dosyası projenin kimlik kartı işlevini görürken, komut satırı arayüzü bağımlılıkların hatasız şekilde kurulmasını ve yönetilmesini sağlar.
Sonraki adım olarak package.json içindeki scripts alanını kullanarak özel terminal komutları yazmayı deneyebilir, semantik versiyonlama (semver) kurallarını inceleyebilir ve alternatif modern paket yöneticileri olan yarn ya da pnpm araçlarının npm ile olan farklarını araştırabilirsiniz.


Commentaires
Aucun commentaire pour le moment. Soyez le premier.