Ce face npm workspaces
Spațiile de lucru (workspaces) țin mai multe pachete în același depozit: de exemplu un API, un site și o bibliotecă comună. În package.json-ul de la rădăcină, câmpul "workspaces" enumeră directoarele lor (acceptă tipare ca packages/*). Rădăcina are de obicei "private": true, ca să nu fie publicată din greșeală.
Un singur npm install la rădăcină instalează dependențele tuturor pachetelor într-un node_modules comun și pune acolo legături spre fiecare spațiu de lucru. Astfel api poate face import din utilitare ca dintr-un pachet obișnuit, iar modificările se văd imediat.
Opțiunea -w <nume> (--workspace) trimite o comandă unui singur spațiu de lucru, iar --workspaces tuturor. Merge la install, run, test, version, publish și altele.
Parametri
| Parametru | Descriere |
|---|---|
"workspaces" |
În package.json de la rădăcină: listă de directoare sau tipare. |
-w <nume sau director> |
Comanda rulează în spațiul de lucru dat. |
--workspaces, -ws |
Comanda rulează în toate spațiile de lucru. |
--if-present |
Sare peste spațiile de lucru fără scriptul cerut. |
Exemple
Exemplul 1: Monorepo cu două pachete
npm init -w creează pachetul și îl leagă (conținutul fiecărui package.json nou, afișat de npm, a fost scos din ieșire). Apoi instalezi biblioteca comună în API.
# package.json de la rădăcină:
# { "name": "scoala-online", "private": true, "workspaces": ["packages/*"] }
npm init -y -w packages/utilitare
npm init -y -w packages/api
npm install utilitare -w api
npm ls
Ieșire în terminal
added 1 package in 539ms
added 1 package in 255ms
up to date, audited 5 packages in 236ms
found 0 vulnerabilities
scoala-online@ /home/ana/proiecte/scoala-online
├─┬ api@1.0.0 -> ./packages/api
│ └── utilitare@1.0.0 deduped -> ./packages/utilitare
└── utilitare@1.0.0 -> ./packages/utilitare
Exemplul 2: Testele din toate pachetele sau dintr-unul
npm test --workspaces
npm run test -w api
Ieșire în terminal
> api@1.0.0 test
> node -e "console.log('teste api ok')"
teste api ok
> utilitare@1.0.0 test
> node -e "console.log('teste utilitare ok')"
teste utilitare ok
> api@1.0.0 test
> node -e "console.log('teste api ok')"
teste api ok
Greșeli frecvente
- Rulezi
npm installîn directorul unui pachet din monorepo: apare un al doileanode_modulesși un al doilea lock. Instalează mereu de la rădăcină, cu-w. - Uiți
"private": truela rădăcină: unnpm publishdat din greșeală acolo publică tot depozitul. - Dai pachetelor nume care există deja în registru: npm poate alege pachetul public în locul celui local. Folosește un scop, de exemplu
@scoala/utilitare.
Comenzi înrudite
npm link: Leagă un pachet aflat pe disc de un proiect, prin legături simbolice, ca să-l testezi fără să-l publici.npm run: Rulează un script din câmpul „scripts” al package.json, cu node_modules/.bin în PATH și cu scripturile pre/post.npm init: Creează fișierul package.json al unui proiect nou; cu -y acceptă valorile implicite fără întrebări.pnpm și yarn (comparație cu npm): Comenzile npm și echivalentele lor în pnpm și Yarn, plus ce trebuie să știi despre Corepack în Node.js 25+.package.json: Fișierul de configurare al unui proiect Node.js: nume, versiune, tipul modulelor, scripturi, dependențe și versiunea Node cerută.