Yarn Nedir? Nasıl Kullanılır?

Web uygulamalarıyla ilgili yayınladığım yazıların ve elbette örneklerin pek çoğunda, kurulum ve yapılandırma süreçlerinde kullanılmak üzere bazı paket yöneticilerinin bahsi geçiyor.

AA

Akıl karışıklığı yaratmamak adına bu paket yöneticileri bir yazı dizisi çerçevesinde ele almak istiyorum. Elbette paket yöneticilerinin tamamına değinmek pek mümkün değil. Daha öncesinde macOS ve Linux için kullanılabilecek paket yöneticilerinden bahsetmiş ve yazı dizisini sonlandırmıştım. Bu yazı serisi ise tamamen web uygulamalarında ve kullanımı popüler olan paket yöneticilerinden oluşmakta. O halde, hızlıca başlayalım. Değineceğimiz ilk paket yöneticisi (package manager) Yarn.

Yarn

Yarn, yüklenen her paketi önbelleğe alan, böylelikle paketin tekrar yüklenmesine gerek kalmayan, kaynak kullanımını en üst düzeye çıkarmak için gerçekleştirilen işlemleri paralelleştiren bir JavaScript paket bağımlılık (dependency) yöneticisidir.

Paket içeriğindeki kodu işleme geçirmeden önce kurulu her paketin çalışabilirliğini doğrulamak için sağlama kullanan, sistemler arasındaki uyuşmazlıkları minimize eden, çevrim dışı modu ile önceden yüklenen bir paketi daha sonra internet bağlantısına gerek duymaksızın tekrar yükleyebilen, npm ile uyumlu, yükleme isteğinde bir hata yaşanması durumunda isteklerin hata üzerine yeniden denenmesini sağlayan Yarn npm kullanımında yaşanan sorunlara ve yeni ihtiyaçlara çözüm oluşturmak amacıyla 2016 yılından bu yana aktif bir şekilde geliştirilmektedir.

NPM yerine kullanılabilecek1, geliştirme sürecindeki bir projeye kolaylıkla entegre edilebilecek özellikler sunan Yarn npm ile aynı yapılandırma dosyasını kullanmaktadır; package.json. Package.json dosyası paylaşılmış bütün kodları ve aynı zamanda paketi tanımlar2. Bu sayede proje dizinindeki paketleri ve elbette yüklenmesi gereken yeni paketleri yarn add komutu ile projeye dahil etmek mümkün. Bu komutun uygulanmasının ardından yarn tarafından yarn.lock adlı bir dosya oluşturulacaktır ve paket işlemleri başlatılacaktır. Yarn.lock dosyasında paketlerin tam versiyon bilgileri, paketlerin nereden indirildiği ve checksum bilgileri gibi bilgiler bulundurulur.

Yarn ile ilgili teknik detaylar ve diğer bilgiler için Yarn resmi web sayfası ve/veya GitHub sayfası3 incelenebilir. Özellikle, geliş(tir)meler için YarnPkg > Blog ve tüm dökümantasyon için Docs sayfası takip edilebilir.

Yarn Kurulumu

Yarn kurulumu için sistem seviyesinde bir başka paket yöneticisi kullanabiliriz. macOS için Brew veya MacPorts tercih edilebilir.

brew install yarn
# ya da
sudo port install yarn

Elbette paket yöneticisi olmaksızın da yükleme işlemi gerçekleştirilebilir. Komut satırı üzerinden curl aracılığıyla indirmek işlemi gerçekleştirmek için şu komut kullanılabilir:

curl -o- -L https://yarnpkg.com/install.sh | bash

Diğer indirme ve versiyon kullanım seçenekleri için Yarn > Installation sayfasını inceleyebilirsiniz. Unutmadan, Node Version Manager (NVM) gibi bir versiyonlama sistemi kullanıyorsanız --without-node parametresiyle kurulumu işlemini gerçekleştirebilirsiniz4.

Yarn Kullanımı

Yarn ile yeni bir proje oluşturmak için yarn init komutunu kullanırız. Projenin yürütüleceği dizinde bu komutu uyguladığımızda bizden prompt aracılığıyla name, version, entry point, repository url gibi bazı bilgiler istenir. Bilgilerin girilmesi ya da es geçilmesinin ardından bir package.json dosyası oluşturulur.

Proje dizinine yeni bir paket / bağımlılık (dependency) eklemek istediğimizde yarn add komutundan faydalanırız.

yarn add [paket-adi]
yarn add [paket-adi]@[paket-versiyonu]
yarn add [paket-adi]@[etiket]

Yükleme işlemini global olarak gerçekleştirmek için global parametresini eklemek yeterli.

yarn add global [paket-adi]

Ayrıca, farklı bağımlılık kategorilerine (devDependencies, peerDependencies veya optionalDependencies) de bağımlılık ekleyebiliriz.

yarn add [paket-adi] --dev
yarn add [paket-adi] --peer
yarn add [paket-adi] --optional

Yarn özelliklerine değindiğim paragrafta paralelleştirmeden bahsetmiştim. O halde çoklu paket yüklemek istediğimizde ne yapacağımızdan da bahsetmeliyim.

yarn add [paket-adi-1] [paket-adi-2] [paket-adi-3] [paket-adi-4] ...

Bir paketi yükseltmek istediğimizde yarn upgrade:

yarn upgrade [paket-adi]
yarn upgrade [paket-adi]@[paket-versiyonu]
yarn upgrade [paket-adi]@[etiket]

Kurulu bir paketi silmek istediğimizde ise yarn remove komutları kullanılır.

yarn remove [paket-adi]

Projedeki tüm bağımlılıkları ise yarn ve/veya yarn install ile yükleyebiliriz. Yarn komutlarıyla ilgili ek bilgiler için Yarn > Usage, CLI Introduction sayfasını inceleyebilirsiniz.

Yarn Paketleri

Yarn ile indirebileceğiniz tüm paketlere Yarn > Packages sayfasından ulaşabilir ve paketlerin detaylarını görüntüleyebilirsiniz.

Bir paket hakkında bilgi almak için yarn info, yüklü paketleri listelemek için ise yarn list komutlarını kullanabiliriz. global kullanımı listeleme için de kullanılabilmektedir.

yarn info [paket-adi]
yarn global list

Peki, lokaldeki bir paketi projeye dahil etmek istediğimizde ne yapabiliriz? Bu tür gereksinimlerde add komutu ile birlikte dizin belirtmemiz yeterli. Daha öncesinde file: prefix gerekmekteydi, ancak son geliştirmelerle birlikte bu gereksinim de ortadan kalktı.

yarn add ./../...
yarn add file:./../...

Son Olarak

Projelerin geliştirilmesi, yedeklenmesi ve paylaşımı gibi süreçlerde oldukça işe yarayan bağımlılık yöneticilerine dair anlatılara devam edecek ve örnek uygulamalarda iş akış süreçlerine de değineceğim. Şimdilik yarn’a dair detayları burada sonlandırıyorum. Planım yarn dışında geliştirme süreci sonlandırılan bower ve npm'den bahsetmekti. Ancak, bu yazı içeriğini planladığım süreç içerisinde, Next Generation Package Management mottosuyla tink5 adında yeni bir JavaScript paket yöneticisi duyurulmuştu6. Dolayısıyla bu paket yöneticisinin özelliklerini anlamak ve bir örnek uygulamada kullanabilmek, yazı dizisine de dahil edebilmek amacıyla süreci biraz uzatmış oldum.