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.

  1. Ümumi anbar (store). Paketin hər versiyasının hər faylı diskdə yalnız bir dəfə saxlanır. Layihənin node_modules qovluğ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ə eyni react-dan istifadə edən ikinci layihə əlavə yer tutmur.
  2. Ciddi node_modules. pnpm layihənin qovluğuna yalnız onun package.json faylındakı paketləri qoyur, qalanını node_modules/.pnpm iç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.
  3. 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.
pnpm faylları bir dəfə saxlayır, layihələr isə onları sərt keçidlərlə qoşur
pnpm faylları bir dəfə saxlayır, layihələr isə onları sərt keçidlərlə qoşur

💡 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).

bash
# 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 -v

Windows-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 enable yazı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:

yaml
# 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: