Yarn veya Npm'den Pnpm'ye nasıl geçiş yapılır?
yazıldı
·
görüntüleme
·
2 dakika okuma

Yarn'a o kadar alışmıştım ki etrafta daha yeni bir alternatif var mı diye hiç araştırma yapma gereği duymamıştım.
Pnpm, görünüşe göre bağımlılıkları çekme, çözme ve depolamada daha performanslı. Mevcut site projemde node_modules
klasörünü silerek bağımlılıkları tekrar çektim ve gerçekten yarn'a göre bariz bir şekilde hızlı görünüyor. Ayrıca pnpm'ye geçiş yapması da kullanması da çok kolay çünkü daha önce npm veya yarn kullanan biri için komutların pek bir farkı yok.
Geçiş
Geçiş yapmak için aşağıdaki komutları kullandım:
- Öncelikle pnpm'yi yüklemeniz gerekiyor. Ben AUR deposundan yükledim. Kurulum bilgilerine buradan ulaşabilirsiniz.
- Daha sonra
node_modules
klasörünü sildim. Pnpm node_modules içerisinde sembolik linkler kullandığı için mevcut klasörü silmemiz gerekiyor. pnpm import
komutunu çalıştırarak mevcutyarn.lock
veyapackages-lock.json
dosyasını kullanarakpnpm-lock.yaml
dosyasını oluşturuyoruz.- Daha sonra
yarn.lock
veyapackages-lock.json
hangisi varsa onu siliyoruz. - Son olarak
pnpm install
komutu ile bağımlılıkları yüklüyoruz.
Eğer herhangi bir yerde yarn veya npm kullandıysanız da bunu pnpm olarak değiştirmeniz gerekiyor.
Sorunlar
Bağımlılık Sorunu
Geçiş yapar yapmaz sitemi Netlify üzerinden tekrar oluşturmaya çalıştım fakat her seferinde Spotify için kullandığım fonksiyonda hata verdi. superagent
modülünü bulamamaktan şikayetçiydi fakat o fonksiyondan direkt olarak superagent
modülünü çağırmıyordum ve halihazırda o modül başka bir paketin bağımlılığı olarak yüklenmişti zaten, yani bulabilmesi gerekiyordu.
Yarn ile kurulum yaparken, tüm paketler node_modules
klasörünün kök dizinine ekleniyor. Sonuç olarak kod içerisinden, projeye direkt bağımlılık olarak eklenmemiş fakat başka paketlere bağımlılık olarak yüklenmiş modülleri de çağırabiliyoruz. Fakat pnpm, yalnızca projenin doğrudan bağımlılıklarını bu klasörün kök dizinine farklı bir klasörden sembolik link olarak ekliyor. Yani bağımlılık olarak eklemeden diğer modülleri çağıramıyoruz.
Özetle, eğer A
paketinden B
paketini çağırıyorsanız ve B
paketi package.json
içerisinde bağımlılık olarak (dependencies
veya devDependencies
) belirtilmemişse A
paketi çalışırken hata verecektir B
paketini bulamayacağı için.
Benim durumumda, sitemdeki ne dinliyorum kısmı için kullandığım spotify-web-api-node
paketi superagent
'i kullandığı için ve ben bunu package.json
içerisinde direkt bağımlılık olarak eklemediğimden superagent
'i bulamadı ve hata verdi. pnpm add superagent@7
diyerek bu sorunu ortadan kaldırdım.
Github Dependabot Sorunu
Görünüşe göre Dependabot henüz pnpm paketini desteklemiyor, dolayısıyla dependabot pnpm-lock.yaml
dosyasını inceleyip size güvenlik sorunları konusunda uyarı yapamayacak. Bu durumda ya pnpm'nin eklemesini bekleyeceksiniz ya da alternatiflerine (Renovate gibi) yöneleceksiniz. Bu konuda açılmış başlığı buradan takip edebilirsiniz: #1736
Pnpm komutları
Açıklama | Komut | Alternatif Komut |
---|---|---|
Bağımlılıkları yükler | pnpm install | pnpm i |
Bağımlılık ekler | pnpm add <paket> | |
Bağımlılıkları günceller | pnpm update | pnpm up | upgrade |
Belirtilen paketi kaldırır | pnpm remove | pnpm rm | un | uninstall |
Belirtilen pakete bağımlı olan tüm paketleri gösterir | pnpm why <paket> | |
Güncelliğini yitirmiş paketleri kontrol eder | pnpm outdated | |
Tüm paketleri ve onların bağımlılıklarını listeler | pnpm list | pnpm ls |
Gereksiz paketleri kaldırır | pnpm prune |
Sonuç
Yavaş yavaş projelerimi pnpm'ye geçirmeye başladım. Terminalde pnpm yazmak garip bir şekilde bana zor ve uzun geliyor (yarn ile aynı harf sayısına sahip olmasına rağmen), bundan dolayı zsh içerisinde alias pnpm=pn
şeklinde bir alias oluşturdum (henüz elim alışmadı).