Ce face npm link
Când lucrezi la o bibliotecă și vrei s-o încerci într-o aplicație, nu trebuie s-o publici la fiecare schimbare. npm link rulat în directorul bibliotecii creează o legătură simbolică (symlink) în directorul global al npm. Apoi, în aplicație, npm link nume-pachet pune în node_modules o legătură spre acel director.
Orice salvezi în bibliotecă se vede imediat în aplicație. Legătura nu este trecută în package.json și dispare la următorul npm install sau npm ci, care readuce versiunea din registru.
Numele folosit este câmpul "name" din package.json-ul bibliotecii, nu numele directorului. Pentru proiecte care stau mereu împreună, spațiile de lucru (workspaces) sunt o soluție mai stabilă.
Parametri
| Parametru | Descriere |
|---|---|
(fără argumente) |
În directorul pachetului: îl înregistrează global ca legătură. |
<pachet> |
În proiect: leagă pachetul înregistrat global. |
<cale> |
Poți da direct calea: npm link ../formatare-lei. |
Exemple
Exemplul 1: Legi biblioteca de aplicație
Biblioteca @ana-pop/formatare-lei e în ~/proiecte/lib, aplicația în ~/proiecte/site.
cd ~/proiecte/lib
npm link
cd ~/proiecte/site
npm link @ana-pop/formatare-lei
readlink node_modules/@ana-pop/formatare-lei
Ieșire în terminal
added 1 package, and audited 3 packages in 468ms
found 0 vulnerabilities
added 1 package, and audited 3 packages in 257ms
found 0 vulnerabilities
../../../lib
Exemplul 2: Folosești biblioteca și vezi legătura
npm ls marchează pachetul ca extraneous, pentru că nu apare în package.json.
node -e 'import("@ana-pop/formatare-lei").then(m => console.log(m.lei(1234.5)))'
npm ls
Ieșire în terminal
1234,50 lei
site@1.0.0 /home/ana/proiecte/site
└── @ana-pop/formatare-lei@1.2.0 extraneous -> ./../lib
Exemplul 3: Desfaci legăturile
cd ~/proiecte/site
npm unlink @ana-pop/formatare-lei
cd ~/proiecte/lib
npm unlink -g
Ieșire în terminal
removed 1 package, and audited 2 packages in 501ms
found 0 vulnerabilities
removed 1 package in 264ms
Greșeli frecvente
- Rulezi
npm installîn aplicație și te miri că modificările din bibliotecă nu se mai văd: instalarea a înlocuit legătura. Rulează din nounpm link. - Folosești alt Node.js (altă versiune din nvm) în cele două directoare: fiecare versiune are directorul ei global, iar legătura nu este găsită.
- Biblioteca are propria copie de React sau de alt pachet care trebuie să existe o singură dată; prin legătură, aplicația ajunge cu două copii și apar erori ciudate.
Comenzi înrudite
npm workspaces: Mai multe pachete într-un singur depozit (monorepo), cu un singur node_modules și comenzi rulate în toate deodată.npm publish: Publică un pachet în registrul npm; cu npm pack –dry-run vezi înainte exact ce fișiere pleacă.npm ls: Afișează arborele pachetelor instalate și arată de ce a ajuns un pachet în node_modules.npm install: Instalează pachete din registrul npm în node_modules și le trece în package.json și package-lock.json.