JavaScript

npm Nedir? Paket Yönetimi

npm Nedir? Paket Yönetimi

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; .gitignore dosyası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 install yazdığında birebir aynı sürümleri almasını garanti eder. Bu nedenle package-lock.json dosyası 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.

#javascript#nodejs#npm#paket yonetimi#web gelistirme

Comments

No comments yet. Be the first to comment.

Leave a comment

Comments are published after the admin approves them.