NPM ve Yarn Nedir? Hangi Paket Yöneticisini Seçmelisiniz?
NPM ve Yarn nedir? NPM, Node.js paketlerini yönetir. Yarn, daha hızlı ve güvenli bir alternatif sunar. Hangi paket yöneticisini seçeceğinizi öğrenin!
Yazılım geliştirme süreçlerinde paket yöneticileri, projelerin bağımlılıklarını yönetmek, paketleri yüklemek, güncellemek ve kaldırmak için kullanılan araçlardır. İki popüler paket yöneticisi olan NPM ve Yarn, JavaScript ekosisteminde geniş bir kullanım alanına sahiptir. Bu rehberde, NPM ve Yarn nedir, nasıl kullanılır, avantaj ve dezavantajları nelerdir, hangi durumlarda tercih edilmelidir ve performans farklılıkları gibi konulara detaylı bir şekilde değineceğiz.
Paket yöneticisi, yazılım projelerinde kullanılan kütüphane ve araçları yönetmek için kullanılan bir yazılımdır. Paket yöneticileri, bağımlılıkların kolayca yüklenmesini, güncellenmesini ve kaldırılmasını sağlar. Ayrıca, projelerin tutarlılığını korumak ve farklı ortamlar arasında uyumluluğu sağlamak için önemli bir rol oynar.
NPM (Node Package Manager), Node.js ekosisteminde kullanılan en popüler paket yöneticisidir. NPM, Node.js ile birlikte gelir ve JavaScript projeleri için kütüphane ve modülleri yönetmek için kullanılır. NPM'in temel işlevleri arasında paket yükleme, güncelleme, kaldırma ve bağımlılık yönetimi bulunur.
NPM, Node.js ile birlikte gelir, bu yüzden öncelikle bilgisayarınıza Node.js indirip kurmanız gerekir. Kurulumdan sonra, komut satırında 'npm -v' komutu çalıştırarak NPM'in yüklü olup olmadığını ve versiyonunu kontrol edebilirsiniz.
Kurulum başarılı bir şekilde tamamlandıysa proje klasörünüzde aşağıdaki komutu çalıştırarak bir 'package.json' dosyası oluşturabilirsiniz.
Yazmış olduğunuz bu komut, size projeniz hakkında birkaç soru soracak ve ardından bir 'package.json' dosyası oluşturacaktır. Hızlı bir başlangıç için 'npm init -y' komutunu kullanabilirsiniz, bu komut varsayılan değerlerle 'package.json' dosyasını oluşturur.
NPM kullanarak bir paket yüklemek için "npm install <paket-adı>" komutu kullanabilirsiniz.
Bir örnek yapalım ve daha önce yayınladığımız "En İyi JavaScript Kütüphaneleri" yazımızda bahsettiğimiz popüler bir javascript kütüphanesi olan Lodash'i NPM ile kuralım.
Bu komut, 'node_modules' adlı bir klasör oluşturur ve lodash paketini bu klasöre indirir. Ayrıca, 'package.json' dosyasına dependencies (bağımlılıklar) kısmına ekler.
Bazı paketler, projenizin her yerinde kullanılmak üzere global olarak yüklenebilir. Örneğin, "nodemon" adlı bir paketi global olarak yüklemek için:
Bu komut nodemon'u global olarak sisteminize yükler, böylece herhangi bir dizinde 'nodemon' komutunu kullanabilirsiniz.
Yüklü paketleri güncellemek için 'npm update' komutunu kullanabilirsiniz. Belirli bir paketi güncellemek için:
Bir paketi kaldırmak için 'npm uninstall' komutunu kullanabilirsiniz:
Paket yöneticisi olarak NPM kullandığınız projede kullandığınız tüm bağımlılıkları yüklemek için şu komutu çalıştırmanız yeterlidir:
Yarn, JavaScript projelerinde bağımlılıkları yönetmek için kullanılan modern ve hızlı bir paket yöneticisidir. Facebook (Meta) tarafından 2016 yılında geliştirilmiş ve açık kaynaklı olarak sunulmuştur. Yarn, özellikle büyük projelerde bağımlılık yönetimini daha verimli ve güvenilir hale getirmek amacıyla tasarlanmıştır.
Sistemizde Node.js ve npm kurulu olmalıdır. Eğer kurulu değilse yukarıdaki adımları takip ederek kurulumları tamamlayarak başlamalısınız.
Yarn kurmak için terminal veya komut istemcisine aşağıdaki komutu yazın:
Yeni bir yarn projesi oluşturalım.
Oluşturduğumuz projeyi 'yarn init' komutu ile başlatalım.
Bu komut, sizi bazı sorularla yönlendirecek ve sonunda bir 'package.json' dosyası oluşturacaktır.,
NPM ile yapmış olduğumuz popüler javascript kütüphanelerinden olan Lodash kurulumunu şimdi Yarn ile yapalım:
Bu komut, lodash paketini indirir ve 'package.json' dosyasına bağımlılık olarak ekler.
Bir paketi kaldırmak için 'yarn remove' komutu kullanılır.
Projede listelenen tüm bağımlılıkları yüklemek için sadece 'yarn install' komutu çalıştırmanız yeterlidir:
NPM ve Yarn arasındaki tercih, projeye ve kişisel tercihlere bağlı olarak değişebilir. Küçük projeler ve hızlı başlangıçlar için NPM yeterli olabilirken, büyük projelerde ve monorepo yapılarında Yarn’ın sağladığı hız ve özellikler avantaj sağlayabilir. Her iki paket yöneticisi de sürekli gelişmekte olup, kullanıcılara geniş bir yelpazede özellikler sunar.
NPM ve Yarn'ı 3 ana başlıkta inceleyelim, avantaj ve dezavantajlarına bakalım:
NPM, Node paketlerini merkezi bir repodan sıralı olarak indirirken, Yarn eş zamanlı olarak birden fazla paketi indirebilir. Bu, daha hızlı yüklemelere kapı aralar. Yarn ayrıca yarnpkg.com adında bir uzak depoya sahiptir ve yüklenen paketlerin sürümlerini lokal bilgisayarda saklar. Bu sayede aynı sürümdeki paket tekrar indirilmeye çalışıldığında, uzak repoya gitmesine gerek kalmaz ve işlem daha hızlı gerçekleşir. NPM, 5.0 sürümünden itibaren performans iyileştirmeleri yapmış olsa da, Yarn’ın paralel indirme yetenekleri genellikle daha hızlı yüklemeler sağlar.
Node modül sisteminde her paketin bir versiyonu bulunur ve semantik versiyonlama usulü tercih edilir. Ancak, belirli bir sürüm aralığında olası tutarsızlıklar yaşanabilir. Örneğin, sizin makinenizde 1.0.2 sürümü yüklüyken, arkadaşınızın makinesinde 1.0.4 sürümü yüklü olabilir. Bu durum, özellikle takım çalışmasında büyük sorunlara yol açabilir. Yarn, bu sorunu çözmek için yarn.lock dosyasını kullanır. Yarn.lock, bağımlılıkların kesin sürümlerini sabitler ve bu sayede projelerin farklı ortamlarda aynı şekilde çalışmasını sağlar. NPM, 5.0 sürümünden itibaren benzer bir kilit dosyası olan package-lock.json'u kullanmaya başlamıştır. Bu dosya, bağımlılıkların kesin sürümlerini belirleyerek tutarlılığı sağlar.
NPM ve Yarn, güvenlik yaklaşımları açısından farklılık gösterir. NPM, paketlerin yüklenmesi sırasında otomatik olarak kod çalıştırılmasına izin verir, bu da potansiyel güvenlik riskleri oluşturabilir. Örneğin, kötü niyetli bir paket, kurulum sırasında zararlı kod çalıştırabilir. Buna karşılık, Yarn, yalnızca yarn.lock veya package.json dosyalarındaki bilgilerden yükleme yaparak güvenliği artırır. Bu yaklaşım, aynı paketin tüm cihazlarda tutarlı bir şekilde kurulmasını sağlar ve sürüm farklılıklarından kaynaklanan hataları önler. Ayrıca, Yarn, paketlerin bütünlüğünü korumak için yükleme sırasında checksum bilgilerini doğrular, böylece veri bütünlüğü ve güvenliği sağlanmış olur. Bu özellikler, Yarn'ı güvenlik açısından daha sağlam bir seçenek haline getirir.