node_modules dizini oluşturmanın birçok yolu vardır. Amacınız en kurallı olanı oluşturmak olmalıdır, ancak bu mümkün değilse, serbest bir node_modules yapmak için seçenekler de vardır.
Varsayılan kurulum
Varsayılan olarak pnpm v5, yarı kurallı bir node_modules oluşturur. Yarı kurallı (birkaç istisna dışında) bağımlılık olarak package.json
'a eklenen paketleri gerektirebileceği anlamına gelir. Buna rağmen, bağımlılıklarınız herhangi bir pakete erişebilir olacaktır.
Varsayılan yapılandırma şöyle görünür:
; Tüm paketler, node_modules/.pnpm/node_modules'a çıkarılır
hoist-pattern[]=*
; TypeScript'e uyumlanmak için tüm type'lar root'a çıkarılır
public-hoist-pattern[]=*types*
; ESLint ile ilgili tüm paketler de root'a çıkarılır
public-hoist-pattern[]=*eslint*
Tak-Çalıştır. En katı yapılandırma
pnpm, v5.9 'dan bu yana Yarn'ın Plug'n'Play 'ini destekler. PnP ile hem uygulamanız hem de uygulamanızın bağımlılıkları yalnızca belirtilen bağımlılıklara erişebilecektir. hoist=false
ayarı ile bu işlem daha da katı olacaktır. Bir monorepo'da uygulamanız üst projenin bağımlılıklarına da erişemeyecektir.
Plug'n'Play'i kullanmak için şu ayarları yapın:
node-linker=pnp
symlink=false
Kurallı, geleneksel modül dizini
PnP'yi kullanmaya henüz hazır değilseniz bile, hala kurallı olabilir ve çekme (hoist) yapılandırmasını false olarak ayarlayarak paketlerin yalnızca kendi bağımlılıklarına erişmesine izin verebilirsiniz:
hoist=false
Ancak, bağımlılıklarınızın bazıları bağımlılıkları olmayan paketlere erişmeye çalışıyorsa, iki seçeneğiniz vardır:
Paketteki manifestoya eksik bağımlılığı eklemek için
pnpmfile.js
oluşturun ve hook kullanın.hoist-pattern
ayarına bir kalıp ekleyin. Örneğin, bulunamayan modülbabel-core
ise, aşağıdaki ayarı.npmrc
'ye ekleyin:hoist-pattern[]=babel-core
En kötü ihtimalle - root'u yukarı çekme
Bazı araçlar, her şeyi sanal kayıt alanı (virtual store) 'nın root'una ve bazısını da direkt root'a taşıyan varsayılan pnpm yapılandırmasıyla bile çalışmayabilir. Bu durumda, her şeyi ya da bir bağımlılık alt kümesini, modules dizininin root'una çekebilirsiniz.
Hoisting everything to the root of node_modules:
shamefully-hoist=true
Yalnızca bir kalıpla eşleşen paketleri yukarı çekin:
public-hoist-pattern[]=babel-*