Son kullanma tarihi geçmiş, bayatlamış bir tarayıcı kullanıyorsanız, Mercedes kullanmak yerine tosbağaya binmek gibi... Web sitelerini düzgün görüntüleyemiyorsanız eh, bi' zahmet tarayıcınızı güncelleyiniz. Modern Web standartlarını karşılayan bir tarayıcı alternatifine göz atın.
Build işlemi pnpm’in cache key’e dahil edemediği unsurlara bağlı olan package’lar için sideEffectsCache.exclude ayarı eklendi. Buna, native addon’ın link verdiği system library’ler gibi dependency’ler dahil. pnpm, listelenen package’ları her project’te yeniden build ediyor ve bu build’leri local side-effects cache veya remoteCache server üzerinden restore etmiyor ya da kaydetmiyor. Global virtual store kullanıldığında her project, bu package’ların ve bunlara dependency’si olan package’ların kendi copy’sine sahip oluyor. Entry’ler minimumReleaseAgeExclude ile aynı name, @scope/* ve name@version pattern’lerini kullanıyor.
pnpm login, web-based login sırasında artık npm-notice response header’ını gösteriyor. Registry’ler bu header’ı, browser üzerinden sign-in işlemini tamamlamak için gereken verification code’u göstermek amacıyla kullanıyor.
--workspace-concurrency=Infinity artık workspace project’lerini concurrency limit olmadan çalıştırıyor. Önceden invalid digit found in string hatasıyla başarısız oluyordu.
pnpm install ve diğer recursive command’lar artık updateConfig hook’unun ayarladığı filter ve filterProd değerlerini uyguluyor. Önceden tüm workspace project’lerinde çalışıyorlardı.
enable-modules-dir=false artık install sırasında mevcut lockfile’dan reuse edilen package’ları da fetch ediyor. Böylece store, lockfile içinde listelenen tüm package’ları içeriyor.
nodeLinker.type: loaded kullanıldığında pnpm tarafından oluşturulan file’lar artık project’lerin zaten Git’te ignore ettiği node_modules dizinine yazılıyor. Store manifest ve loader şu konumlarda tutuluyor:
node_modules/.pnpm/.store-manifest.json
node_modules/.pnpm/.store-loader.mjs
Bin shim’leri ise node_modules/.bin içinde yer alıyor.
Önceki sürümler .pnpm-store.json ve .pnpm-store-loader.mjs dosyalarını project root’a, ayrıca root ve her workspace package içine .pnpm directory yazıyordu. Reinstall sonrasında bunlar silinebilir.
nodeLinker.type: loaded kullanıldığında kendi node_modules directory’sini birlikte dağıtan package’lar, örneğin bundled dependency’leriyle gelen npm, artık store üzerinden yükleniyor. Önceden install içinde böyle tek bir package bulunması bile tüm Node.js process’lerinin başlatılamamasına neden olabiliyordu.
nodeLinker.type: loaded ile script’ler artık devEngines.runtime üzerinden kurulmuş Node.js runtime’ını çalıştırabiliyor. Önceden node çağıran her script kendi shim’ini tekrar tekrar çalıştırıyor ve sonunda Argument list too long hatasıyla başarısız oluyordu.
nodeLinker.type: loaded ile Node.js process’leri daha hızlı başlıyor. 13.000 stored file içeren bir project’te process başına startup overhead 67 ms’den 18 ms’ye düşürüldü.
overrides değiştirildikten sonra, lockfile optional peer dependency’yi başka bir package’ın npm alias’ına resolve ediyorsa pnpm install artık ERR_PNPM_NO_MATCHING_VERSION hatasıyla başarısız olmuyor.
catalogPrune kullanılan frozen install artık pnpm-lock.yaml içinde hâlâ kayıtlı olan catalog entry’lerini kaldırmıyor. Önceden bazı workspace project’leri disk üzerinde eksikse pnpm install --frozen-lockfile --filter komutu ERR_PNPM_LOCKFILE_CONFIG_MISMATCH hatası verebiliyordu.
pnpm install --fix-lockfile artık lockfile entry’lerindeki deprecated ve hasBin field’larını kaldırmıyor.
enableGlobalVirtualStore açıkken node_modules güncelleyen bir install, yarıda kesilmiş önceki install nedeniyle dependency link’leri veya package file’larının bir kısmı eksik kalmış global virtual store package’larını artık onarıyor. Önceden project’in node_modules kaydı package’ı mevcut gösteriyorsa eksik package olduğu gibi korunuyordu.
pnpm install artık kendi pnpm-workspace.yaml veya .git directory’sine sahip nested directory içindeki Cargo ve Python project’lerini atlıyor. Buna aynı workspace’in git worktree’si veya ayrı clone’u da dahil.
Package metadata için gösterilen Request took warning artık süreyi pnpm request’i gerçekten gönderdiğinde ölçmeye başlıyor. Önceden boş request slot’u bekleme süresi de hesaba katılıyor ve bu yüzden büyük install’larda registry hızlı cevap verse bile gereksiz warning görülebiliyordu.
Bu sürüm, WebContainer build’ini ayrı bir @pnpm/wasm paketine taşıyor, pnpm paketinin boyutunu yeniden yaklaşık 4 MB seviyesine indiriyor ve GitLab CI üzerinde provenance ile pnpm publish kullanımını düzeltiyor.
Yama Değişiklikleri
StackBlitz WebContainers için WebAssembly build’i artık ayrı bir @pnpm/wasm paketi olarak sunuluyor. pnpm ve @pnpm/exe paketleri artık bunu içermiyor; böylece unpacked boyutları yaklaşık 55 MB’tan tekrar yaklaşık 4 MB’a düşüyor. WebContainer içinde pnpm komutunu kullanmak için npm ile @pnpm/wasm kurulmalı.
GitLab CI üzerinden provenance ile yapılan pnpm publish işlemleri artık npm registry tarafından 422 hatasıyla reddedilmiyor. Provenance statement artık npm’in yaptığı gibi GitLab CI variable’larını invocation.parameters içine ekliyor.
pnpm audit signatures, bir registry signing key isteğini örneğin registry.npmjs.org adresine yönlendirdiğinde artık redirect target’ın TLS ayarlarını kullanıyor. Private registry’ye özel tanımlanmış bir cafile artık yönlendirilmiş isteğin başarısız olmasına neden olmuyor.
Injected workspace package, peerDependencies içinde catalog entry kullandığında güncel bir lockfile’ın pnpm install --frozen-lockfile tarafından yanlışlıkla reddedilmesi düzeltildi.
[<since>] filter selector, Git 2.24 ile 2.27 sürümlerinde yeniden çalışıyor. Git 2.24’ten daha eski sürümlerde selector artık gereken Git sürümünü açıkça belirten bir hata veriyor.
Ayrıca dizin adlarında ASCII dışı karakterler bulunan project’lerdeki değişiklikler artık doğru şekilde algılanıyor. Önceden bu değişiklikler parent project’e aitmiş gibi değerlendirilebiliyordu. changedFilesIgnorePattern ve testPattern artık dosya adında ASCII dışı karakterler bulunan değişmiş dosyalarla da eşleşiyor.
pnpm executable yaklaşık %10 küçültüldü. macOS arm64 üzerinde boyut 45,1 MB’tan 40,3 MB’a düştü.
Uzun release geçmişine sahip package’lar için trust downgrade kontrolleri hızlandırıldı.
optimisticRepeatInstall: false kullanıldığında pnpm install, node_modules zaten güncel olsa bile project’in kendi lifecycle script’lerini, örneğin prepare script’ini, artık çalıştırıyor.
pnpm self-update, Homebrew üzerinden kurulmuş pnpm için artık hata vererek duruyor ve yüklü formula’ya uygun brew upgrade komutunu gösteriyor; örneğin brew upgrade pnpm veya brew upgrade pnpm@11. Önceden pnpm’in ikinci bir kopyasını kuruyor ancak Homebrew sürümü onu gölgelemeye devam ediyordu.