npm link în Node.js

npm și pachete Toate versiunile npm

Leagă un pachet aflat pe disc de un proiect, prin legături simbolice, ca să-l testezi fără să-l publici.

Sintaxă
npm link                 # în directorul pachetului
npm link <pachet>       # în proiectul care îl folosește
npm unlink <pachet>

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 nou npm 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.