Paket Yöneticileri, Node.JS ve Beraberinde Gelenler
Özellikle büyük ve karmaşık projelerde yazılım bağımlılıklarını yönetmek ve yazılımların güncel kalmasını sağlamak için kullanılan paket yöneticileri, modern yazılım geliştirme süreçlerinde çok önemli rol oynuyor. Paket yöneticilerinin neden kullanıldığını şöyle bir özetleyelim;
İçindekiler
Bağımlılık Yönetimi:
Yazılım projelerinde genellikle birçok üçüncü taraf kütüphaneye (bağımlılığa) ihtiyaç duyar. Bu durum bağımlılıkların kolayca kurulmasını, güncellenmesini ve yönetilmesini sağlar.
Kolay Kurulum:
Yazılım geliştiricileri, gerekli kütüphaneleri ve araçları tek bir komutla kurabilirler. Böylece manuel olarak dosya indirme ve yapılandırma ihtiyacı ortadan kalkar.
Versiyon Kontrolü:
Paket yöneticileri, belirli bir kütüphanenin belirli bir sürümünü yüklemeye olanak tanır. Böylece projelerin tutarlı bir şekilde çalışması ve uyumsuzluk sorunlarının önlenmesi sağlanmış olur.
Paylaşım ve Dağıtım:
Yazılım geliştiricileri, kendi kütüphanelerini ve araçlarını paket yöneticisi aracılığıyla paylaşabilir ve dağıtabilirler. Böylece açık kaynak projelerin ve iş birliklerinin yayılması kolaylaşır.
Bağımlılık Ağaçları:
Paket yöneticileri, bir projenin tüm bağımlılıklarını ve bu bağımlılıkların bağımlılıklarını yöneterek projelerin karmaşık bağımlılık yapılarını kolaylaştırmayı sağlar.
Script Yönetimi:
Birçok paket yöneticisi, projede kullanılan çeşitli komutları ve scriptleri tanımlamayı ve çalıştırmayı kolaylaştırır.
Geçmişten Günümüze Paket Yöneticileri
Paket yöneticileri, aslında yazılım geliştirme süreçlerinin karmaşıklığı arttıkça ortaya çıkmıştır. İlk zamanlarda geliştiriciler bağımlılıkları manuel olarak yönetmek zorunda kalıyorlardı ve bu durum dosya indirme, yapılandırma ve sürüm kontrolü gibi zahmetli ve hata yapmaya açık işlemlere yol açıyordu.
1990’ların sonlarında ve 2000’lerin başlarında, ilk paket yöneticileri ortaya çıkmaya başlamıştır. Örnek olarak Perl için CRAN (Comprehensive Perl Archive Network) ve Ruby için RubyGams çıkartılmıştır.
Günümüzde en popülerlerden bir tanesi olan NPM, 2009 yılında Node.js çıkmasıyla birlikte, JavaScript için modern bir paket yöneticisine ihtiyaç duyulmuştur. 2010 yılında Isaac Z. Schlueter tarafından NPM geliştirilmiş ve Node.js ekosisteminin bir parçası haline getirilmiştir.
NPM’in getirmiş olduğu başarı ve popülerlik ardından Python için pip, PHP için Composer, Java için Maven ve diğer birçok dil ve platform için yöneticileri geliştirilmeye başlanmıştır.
NPM Kullanımı ve Kurulumu
NPM kurulumu için ilk olarak gereken Node.js kurulumunu yapmaktır.
Node.js Kurulumu
- “https://nodejs.org/en” sitesine gidin.
- İşletim sisteminize uygun olan yükleyiciyi indirin (Genelde LTS sürümü tercih edilir).
- Kurulumu yapın ve talimatları izleyerek Node.js’i yükleyin.
Linux Kurulumu
Debian tabanlı (Ubuntu) terminal içerisinden;
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash –sudo apt-get install -y nodejs
CentOS tabanlı
curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash –sudo yum install -y nodejs
Node.js yüklendiğinde, NPM otomatik olarak birlikte gelir. Yüklemenin başarılı olup olmadığını kontrol etmek için terminal veya komut istemcisinde aşağıdaki komutları kullanabilirsiniz.
node –v
npm –v
Bu komutlar, yüklü olan Node.js ve NPM sürümlerini gösterecektir.
NPM ile Neler Yapılır?
Yeni bir Node.js projesi başlatıp ‘npm init’ komutunu kullanabilirsiniz;
mkdir example-project
cd example-project
npm init
Bu komut, sizi adım adım ‘package.json’ dosyasını oluşturmanız için yönlendirecektir. Tüm varsayılan değerleri kabul etmek için ‘npm init -y’ komutunu kullanabilirsiniz.
“package.json” Node.js projelerinin temel yapı taşlarından biridir ve projenizin meta verilerini, bağımlılıklarını, betiklerini ve çeşitli yapılandırma seçenelerini içeren bir dosyadır. Bu dosya, projenizi tanımlamanıza ve yönetmenize yardımcı olur.
Şimdi NPM ile gelişen ve NPM den daha iyi mi kötü mü olarak hala tartışmalı olarak ilerleyen iki tane daha paket yöneticisini size anlatacağım. Bir tanesi PNPM ve diğeri de BUN.
PNPM (Performant NPM)
PNPM (Performant NPM) aslında NPM de yaşanılan zorlukların üstesinden gelmek için yapılmış bir paket yöneticisidir. PNPM, her projede bağımlılıkların tek bir kopyasını depolayarak disk alanından tasarruf sağlar. Paketler, pnpm’in global bir depo klasöründe (genellikle .pnpm-store) saklanır. Projeler, bu merkezi depodaki paketlere sembolik bağlantılar (symlinks) oluşturur. Bu projeler arasında bağımlılıkların paylaşılmasını sağlar ve disk alanını önemli ölçüde azaltır.
PNPM’de her proje, kendi bağımlılıklarını izole şekilde yönetir. Böylece bağımlılıkların proje bazında yönetilmesini ve çalışmaların önlenmesini sağlanır. Projeler arasında paketler bağımsız olarak izole edilir ve böylece bağımlılık sürümlerinin çakışmasını önler. Ayrıca bağımlılıkları paralel olarak indirir ve kurar, kurulum süresini kısaltır. Bu yaklaşım, paketlerin hızla yüklenmesini sağlar.
PNPM, bağımlılıkların ağaç yapısını yönetir, ancak paketlerin ‘node_modules’ klasörüne sembolik bağlantılar ekleyerek bağımlılıkların birbirine doğru bir şekilde bağlanmasını sağlar. Proje dizininde gereksiz dosya tekrarlarını önler. Npm ve Yarn gibi diğer paket yöneticileriyle uyumlu şekilde çalışır.
PNPM (Performant NPM) Kullanmanın Avantajları
- Disk Alanı Tasarrufu sağlar
- Hız ve Performans
- Yalıtılmış Bağımlılıklar
- Uyumluluk
BUN
Jarred Sumner tarafından oluşturulan Bun, JavaScript ve TypeScript uygulamalarında süper hızlı, hepsine sahip bir araç seti diyebiliriz aslında. Bun’un güzelliği, geliştirme sürecini kolaylaştırma, onu her zamankinden daha sorunsuz ve verimli hale getirme yeteneğinde saklanmaktadır. Çünkü Bun sadece bir çalışma zamanı değil aslında baktığınızda hem de bir paket yöneticisi, bir test çalıştırıcısıdır. JavaScript için bir İsviçre çakısı haline gelmiş diyebilirim hatta.
Node.js’sin devrim gibi çıkışını ve gelişimini bir evden bir ülkeye dönüşmek olarak örneklendirebilirim. Böylesi devasa bir çıkış büyük bir yığın ve karmaşıklık oluşturdu. BUN’ın çıkışı ise bu karmaşıklığı sadeleştirerek, daha yalın ve hızlı olmasını sağladı. Amaç JavaScript’in daha da hızlanması ve güçlenmesidir.
Node.js ile BUN Arasındaki Temel Farklar
- js temel olarak C++ ile yazılırken Bun, Zig adı verilen bir dil ile yazılmıştır.
- js, Google’ın Chrome tarayıcısına güç veren V8 motorunu kullanırken BUN, Apple tarafından Safari için geliştirilen açık kaynaklı bir JavaScript motoru olan JavaScriptCore’u (JSC) kullanır.
- V8 ve JSC farklı mimarilere ve optimizasyon stratejilerine sahiptir. JSC, biraz daha yavaş bir yürütme süresi ile daha hızlı başlatma sürelerine ve daha az bellek kullanımına öncelik verir.
- Öte yandan V8, daha fazla bellek kullanımına yol açabilecek daha fazla çalışma zamanı optimizasyonu ile hızlı yürütmeye öncelik verir. Bu, Bun’u Node.js’den 4 kata kadar daha hızlı başlatarak hızlı hale getirir.
Genel olarak baktığımızda paket yöneticilerinin yazılım dünyasında hayat kurtarıcı bir rol üstlenmesini sağlamıştır. Hız, kolaylık, erişebilirlik, paylaşım vb. özellik katmıştır. Node.js’in yaratmış olduğu evren, yeni çıkan paket sürümleri ve paketlerle JavaScript için daha verimli ve hızlı hale gelmiştir.