dev-tools
Sözlük ↗Paket Yöneticisi (Package Manager)
Bir paket yöneticisi, bir yazılım projesinin bağımlı olduğu üçüncü taraf kütüphanelerin ("paketler" veya "bağımlılıklar") kurulumunu, güncellenmesini, yapılandırılmasını ve kaldırılmasını otomatikleştiren bir araçtır; bunun yanında bu paketlerin kendi bağımlılıklarının oluşturduğu genellikle karmaşık ağı da çözer. Örnekler arasında npm/pnpm/Yarn (JavaScript/Node.js), pip/Poetry/uv (Python), Cargo (Rust), Composer (PHP) ve Bundler (Ruby) bulunur. AI/SaaS geliştiricileri için neden önemli: modern hiçbir uygulama neredeyse tamamen sıfırdan inşa edilmez — tipik bir SaaS projesi, HTTP işleme, tarih ayrıştırma, kimlik doğrulama ve UI bileşenleri gibi işler için düzinelerce ila yüzlerce üçüncü taraf pakete bağımlıdır ve bunların hepsinin (ve kendi alt bağımlılıklarının) uyumlu versiyonlarını elle takip etmek gerçek bir ölçekte fiilen imkansız olurdu. Paket yöneticileri, tedarik zinciri güvenliği için de son derece önemlidir: geçişli bir bağımlılık olarak içeri sızan ele geçirilmiş veya kötü amaçlı bir paket, modern yazılımdaki en ciddi gerçek dünya saldırı vektörlerinden biridir; kilit dosyalarının (lockfile) ve otomatik zafiyet taramasının (`npm audit`, Dependabot) önemli olmasının nedeni budur. Nasıl çalışır: bir proje, doğrudan bağımlılıklarını ve versiyon kısıtlarını bir manifest dosyasında (npm için `package.json`, Python için `pyproject.toml`) bildirir. Bir kurulum komutu çalıştırmak, bağımlılıkların bağımlılıkları dahil tüm bağımlılık ağacını tam versiyonlara kadar çözer ve bu tam olarak çözülmüş versiyonları bir kilit dosyasına (`package-lock.json`, `poetry.lock`) yazar; böylece her geliştirici ve her CI çalışması, ortamlar arasında versiyon kaymasından kaynaklanan ince hatalar riski taşıyan "kısıtları karşılayan herhangi bir versiyon" yerine aynı bağımlılık ağacını kurar. Uygulamalı örnek: bir geliştirici Node.js projesine tarih biçimlendirme eklemek istiyor. `npm install date-fns` çalıştırır; bu, `date-fns`'i `package.json`'ın bağımlılıklarına ekler, onu ve (bu durumda sıfır olan) alt bağımlılıklarını `node_modules/`'a indirir ve tam olarak çözülmüş versiyonu `package-lock.json`'a kaydeder. Bir takım arkadaşı repoyu klonlar ve `npm ci` (yeniden çözmeden, doğrudan kilit dosyasından kurulum) çalıştırır; bu, byte-eşdeğer bir bağımlılık ağacı almasını garanti eder, yani "bende çalışıyor" durumu, paylaşılan bir kütüphanedeki sessiz bir küçük versiyon farkından kaynaklanamaz. Üç ay sonra, Dependabot gibi otomatik bir araç, `date-fns`'in geçişli bir bağımlılığında bilinen bir güvenlik açığı olduğunu belirten bir pull request açar; ekip, `node_modules` içindeki her paketi elle denetlemek yerine tek bir kilit dosyası güncellemesiyle bunu yamalar. 300'den fazla bağımlılığı olan gerçek dünya bir projede (her alt bağımlılık sayıldığında tipik bir rakam, sadece geliştiricinin açıkça kurduğu paketler değil) çarpıldığında, bu otomatik çözümleme ve kilitleme, bir bağımlılık ağacını hem güncel hem de güvenli tutmanın tek pratik yoludur.
İlgili terimler