Leylanın noutbukunda on dörd təlim layihəsi var və hər birində yüzlərlə meqabaytlıq öz node_modules qovluğu dayanır — üstəlik demək olar ki, hamısında eyni React. Murad başqa yol təklif edir: «web, api və ümumi paketləri bir repozitoriyada toplayaq, quraşdırma və əlaqələndirməni isə pnpm öz üzərinə götürsün». Bu dərsdə pnpm-in npm-dən nə ilə fərqləndiyini, iş sahəsinin (workspace) necə qurulduğunu və bir paketin kodunu npm-ə yükləmədən digərinə necə qoşmağı öyrənəcəksiniz.
Nə üçün pnpm
pnpm — Node.js üçün paket meneceridir. Eyni package.json, eyni npm reyestri, amma faylların saxlanma sxemi fərqlidir. Onun üç əsas ideyası var.
- Ümumi anbar (store). Paketin hər versiyasının hər faylı diskdə yalnız bir dəfə saxlanır. Layihənin
node_modulesqovluğuna fayllar kopyalanmır, sərt keçidlərlə (hard link) qoşulur. Sərt keçid eyni faylın daha bir adıdır: iki ünvan, bir otaq. Ona görə eynireact-dan istifadə edən ikinci layihə əlavə yer tutmur. - Ciddi
node_modules. pnpm layihənin qovluğuna yalnız onunpackage.jsonfaylındakı paketləri qoyur, qalanınınode_modules/.pnpmiçində gizlədir. npm ilə kod bəzən heç kimin elan etmədiyi paketi import edir — o, sadəcə «yanda dururdu». Başqasının kompüterində və ya production-da belə kod yıxılır. pnpm xətanı dərhal tutur. - Hazır workspace dəstəyi. pnpm eyni repozitoriyanın bir neçə paketini vahid quraşdırmada birləşdirə bilir. Monorepozitoriyaya məhz bu lazımdır.
💡 Anbar layihə ilə eyni diskdə olmalıdır. Başqa diskdə sərt keçid yaratmaq mümkün deyil — pnpm faylları kopyalayır və yer qazancı itir.
pnpm-in quraşdırılması
Bu dərsin yazıldığı vaxt aktual versiya pnpm 12-dir. Bu müstəqil proqramdır: quraşdırıldıqdan sonra ona Node.js lazım deyil (layihələriniz isə əvvəlki kimi Node.js üzərində işləyir).
# any OS (Node.js 22.13+ is needed only to run this installer)
npx get-pnpm
# macOS / Linux without Node.js
curl -fsSL https://get.pnpm.io/install.sh | sh -
# check
pnpm -vWindows-da pnpm sənədləri npx get-pnpm əmrini məsləhət görür: Windows Defender quraşdırma skriptini bəzən blok edir. pnpm -v əmri versiyanı göstərəcək — o, package.json üçün lazım olacaq.
💡 Köhnə təlimatlarda
corepack enableyazılır. Corepack Node.js-ə 14.19-dan 24-ə qədər daxil idi, Node.js 25-dən başlayaraq isə onu ayrıca qurmaq lazımdır (npm install -g corepack). pnpm-in öz quraşdırıcısından istifadə etmək daha asandır.
İş sahəsi: pnpm-workspace.yaml
İş sahəsi (workspace) — pnpm-in eyni anda bir neçə paketi gördüyü repozitoriyadır. Kökdə onları haradan axtarmaq lazım olduğunu deyən bir fayl kifayətdir:
# pnpm-workspace.yaml (next to the root package.json)
packages:
- "apps/*"
- "packages/*"apps/ və packages/ daxilində öz package.json faylı olan hər qovluq ayrıca paket olur. Tətbiqləri (apps/) işə salır və internetə çıxarırlar, paketləri (packages/) isə başqalarına qoşurlar. Kökdəki package.json repozitoriyanın özünü təsvir edir: