15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți
08.10.2024

Cum să Instalezi NVM pentru Node.js pe Ubuntu: Ghid Tehnic Complet

NVM (Node Version Manager) este un script shell conform POSIX care instalează și gestionează mai multe medii de execuție Node.js izolate pe o singură mașină, fără a necesita privilegii de root sau modificarea căilor la nivel de sistem. Fiecare versiune Node.js se află în propriul director sub `~/.nvm/versions/node/`, oferindu-vă o izolare completă, fără conflicte între proiecte.

Acest ghid parcurge o instalare NVM de nivel producție pe Ubuntu (20.04, 22.04 și 24.04), acoperind nu doar comenzile de bază, ci și cazurile speciale ale fișierelor de profil shell, automatizarea fluxului de lucru `.nvmrc`, migrarea pachetelor globale și capcanele specifice serverelor pe care majoritatea tutorialelor le omit.

De ce NVM în loc de managerul de pachete al sistemului

Instalarea Node.js prin `apt` plasează un singur binar la nivel de sistem la `/usr/bin/node`. Actualizarea acestuia afectează simultan toate aplicațiile de pe gazdă. Pe o mașină de dezvoltare partajată sau un VPS care rulează mai multe proiecte Node.js, aceasta creează medii fragile, greu de reprodus.

NVM rezolvă această problemă instalând fiecare versiune Node.js într-un director din spațiul utilizatorului și manipulând `PATH` la nivelul shell-ului. Rezultatul este controlul versiunilor per utilizator, per proiect, fără niciun impact asupra stării pachetelor sistemului de operare.

NVM vs. Alți manageri de versiuni Node.js

FuncționalitateNVMfnmVoltan
LimbajShell (Bash/Zsh)RustRustShell
VitezăModeratăFoarte rapidăFoarte rapidăRapidă
Suport `.nvmrc`DaDaParțialNu
Fixare per proiectDaDaDaNu
Suport WindowsNu (doar WSL)DaDaNu
Izolarea pachetelor globaleDaDaDaNu
Suprasarcină la pornirea shell-ului~70ms~5ms~5msMinimă
Maturitate / ecosistemCea mai ridicatăRidicatăMedieRidicată

NVM rămâne opțiunea cel mai bine documentată și susținută de ecosistem, făcând-o implicit cea mai sigură alegere pentru echipe și medii de server unde reproductibilitatea contează mai mult decât viteza brută de pornire.

Cerințe preliminare

  • Ubuntu 20.04, 22.04 sau 24.04 (desktop sau server)
  • Un cont de utilizator non-root cu privilegii `sudo`
  • `curl` sau `wget` instalat (ambele sunt prezente implicit pe majoritatea imaginilor Ubuntu)
  • Familiarizare de bază cu Bash sau Zsh

Pentru a confirma shell-ul și versiunea Ubuntu înainte de a începe:

“`bash

echo $SHELL

lsb_release -a

“`

Pasul 1: Actualizați indexul de pachete al sistemului

Reîmprospătați listele de pachete APT pentru a vă asigura că orice dependențe rezolvate în timpul sesiunii sunt actuale:

“`bash

sudo apt-get update && sudo apt-get upgrade -y

“`

Confirmați de asemenea că `curl` este disponibil:

“`bash

curl –version || sudo apt-get install -y curl

“`

Pasul 2: Descărcați și rulați scriptul de instalare NVM

Programul de instalare oficial NVM este găzduit pe GitHub. Clonează depozitul NVM în `~/.nvm` și adaugă blocul de inițializare shell necesar în fișierul dvs. de profil.

Opțiunea A — Folosind curl (recomandat):

“`bash

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

“`

Opțiunea B — Folosind wget:

“`bash

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

“`

Verificați întotdeauna cel mai recent tag de versiune pe pagina de lansări NVM de pe GitHub înainte de a rula. Înlocuiți `v0.40.1` cu tag-ul stabil curent dacă a fost publicată o versiune mai nouă.

Ce face de fapt programul de instalare:

  1. Clonează depozitul NVM în `~/.nvm`
  2. Detectează shell-ul activ (`bash`, `zsh`, `ksh` sau `fish`)
  3. Adaugă următorul bloc de inițializare în fișierul de profil corespunzător (`~/.bashrc`, `~/.zshrc`, `~/.profile` sau `~/.bash_profile`)

“`bash

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"

“`

Notă de securitate: Redirecționarea unui script de la distanță direct în `bash` este un tipar comun, dar prezintă riscuri inerente. Pentru servere de producție sau medii de server dedicat, descărcați mai întâi scriptul, inspectați-l, apoi executați-l:

“`bash

curl -o install_nvm.sh https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh

cat install_nvm.sh # review before running

bash install_nvm.sh

“`

Pasul 3: Activați NVM în sesiunea curentă de shell

Programul de instalare modifică profilul dvs., dar aceste modificări intră în vigoare doar în sesiunile noi de shell. Pentru a activa NVM imediat fără a deschide un terminal nou:

Pentru Bash:

“`bash

source ~/.bashrc

“`

Pentru Zsh:

“`bash

source ~/.zshrc

“`

Încărcare manuală (funcționează în orice shell):

“`bash

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

“`

Capcană frecventă: Fișierul de profil nu este încărcat în shell-urile non-interactive

Pe Ubuntu, `~/.bashrc` este încărcat doar pentru shell-urile interactive non-login. Dacă vă conectați prin SSH (un shell de login), Bash citește în schimb `~/.bash_profile` sau `~/.profile`. Dacă NVM nu este găsit după autentificarea SSH, adăugați blocul de încărcare în `~/.bash_profile`:

“`bash

echo 'source ~/.bashrc' >> ~/.bash_profile

source ~/.bash_profile

“`

Aceasta este una dintre cele mai frecvent întâlnite probleme la configurarea NVM pe servere la distanță.

Pasul 4: Verificați instalarea NVM

“`bash

nvm –version

“`

Rezultat așteptat (numărul versiunii poate varia):

“`

0.40.1

“`

Dacă comanda returnează `nvm: command not found`, profilul shell nu a fost încărcat corect. Rulați din nou comanda de încărcare din Pasul 3 și verificați că blocul de inițializare există în fișierul dvs. de profil:

“`bash

grep -n 'NVM_DIR' ~/.bashrc

“`

Pasul 5: Instalați Node.js folosind NVM

Instalați cea mai recentă versiune LTS (recomandat pentru producție)

“`bash

nvm install –lts

“`

Indicatorul `–lts` instalează cea mai recentă versiune Long-Term Support, care primește patch-uri de securitate timp de 30 de luni. Pentru sarcini de producție pe un VPS cu cPanel sau orice mediu de server, LTS este puternic preferat față de versiunea curentă.

Instalați cea mai recentă versiune absolută

“`bash

nvm install node

“`

Instalați o versiune specifică

“`bash

nvm install 20.14.0

“`

Listați toate versiunile disponibile de la distanță

“`bash

nvm ls-remote

“`

Pentru a filtra doar versiunile LTS:

“`bash

nvm ls-remote –lts

“`

Pasul 6: Verificați versiunile active Node.js și npm

“`bash

node -v

npm -v

“`

Confirmați de asemenea calea binarului pentru a vă asigura că nu folosiți accidental o instalare Node.js la nivel de sistem:

“`bash

which node

Expected: /home/<username>/.nvm/versions/node/v20.14.0/bin/node

“`

Pasul 7: Gestionați mai multe versiuni Node.js

Listați toate versiunile instalate local

“`bash

nvm ls

“`

Exemplu de rezultat:

“`

-> v20.14.0

v18.20.3

v16.20.2

default -> lts/* (-> v20.14.0)

node -> stable (-> v20.14.0) (default)

lts/* -> lts/iron (-> v20.14.0)

“`

Comutați între versiuni

“`bash

nvm use 18.20.3

“`

Această modificare se aplică doar sesiunii curente de terminal. Deschiderea unui terminal nou revine la aliasul implicit.

Verificați ce versiune este activă în prezent

“`bash

nvm current

“`

Pasul 8: Setați o versiune Node.js implicită persistentă

Pentru a face o versiune specifică implicită pentru toate sesiunile noi de shell:

“`bash

nvm alias default 20.14.0

“`

Puteți de asemenea crea un alias pentru o linie de lansare în loc de o versiune specifică de patch, care urmărește automat actualizările în cadrul acelei linii:

“`bash

nvm alias default lts/*

“`

Pasul 9: Automatizați comutarea versiunilor cu `.nvmrc`

Aceasta este una dintre cele mai puternice și mai puțin utilizate funcționalități ale NVM. Plasați un fișier `.nvmrc` în rădăcina proiectului dvs. conținând versiunea Node.js necesară:

“`bash

echo "20.14.0" > /path/to/your/project/.nvmrc

“`

Apoi, când intrați cu `cd` în acel director:

“`bash

nvm use

Found '/path/to/your/project/.nvmrc' with version <20.14.0>

Now using node v20.14.0

“`

Comutare automată a versiunii la schimbarea directorului

Adăugați următoarele în `~/.bashrc` (sau `~/.zshrc`) pentru a declanșa `nvm use` automat ori de câte ori intrați într-un director care conține un fișier `.nvmrc`:

Pentru Bash:

“`bash

cdnvm() {

command cd "$@" || return $?

nvm_path="$(nvm_find_up .nvmrc | command tr -d 'n')"

if [[ ! $nvm_path = *[^[:space:]]* ]]; then

declare default_version

default_version="$(nvm version default)"

if [[ $default_version == "N/A" ]]; then

nvm use default

elif [[ $(nvm current) != "$default_version" ]]; then

nvm use default

fi

elif [[ -r "$nvm_path/.nvmrc" && -r "$nvm_path" ]]; then

declare nvm_version

nvm_version=$(<"$nvm_path/.nvmrc")

declare locally_resolved_nvm_version

locally_resolved_nvm_version="$(nvm ls –no-colors "$nvm_version" | command tail -1 | command tr -d '->*' | command tr -d '[:space:]')"

if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then

nvm install "$nvm_version"

elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then

nvm use "$nvm_version"

fi

fi

}

alias cd='cdnvm'

“`

Acest tipar este deosebit de valoros în pipeline-urile CI/CD și în mediile de echipă unde mai mulți dezvoltatori lucrează la proiecte cu cerințe diferite de runtime.

Pasul 10: Gestionați pachetele npm globale între versiuni

Fiecare versiune Node.js instalată de NVM are propriul director `node_modules` izolat pentru pachetele instalate global. Aceasta înseamnă că instrumentele precum `pm2`, `yarn` sau `typescript` instalate global sub `v18` nu sunt disponibile sub `v20`.

Instalați un pachet global pentru versiunea activă

“`bash

npm install -g yarn

npm install -g pm2

npm install -g typescript

“`

Migrați pachetele globale la instalarea unei versiuni noi

NVM oferă un indicator integrat pentru a copia toate pachetele globale dintr-o versiune într-o nouă instalare:

“`bash

nvm install 20.14.0 –reinstall-packages-from=18.20.3

“`

Acest lucru este esențial la actualizarea versiunilor Node.js pe un server care rulează procese persistente gestionate de PM2 sau instrumente similare.

Listați pachetele instalate global pentru versiunea curentă

“`bash

npm list -g –depth=0

“`

Pasul 11: Dezinstalați o versiune Node.js

Înainte de dezinstalare, comutați la o altă versiune decât cea pe care doriți să o eliminați:

“`bash

nvm use 20.14.0

nvm uninstall 16.20.2

“`

Nu puteți dezinstala versiunea activă în prezent. Încercarea de a face acest lucru returnează o eroare.

Avansat: Utilizarea NVM în medii non-interactive (CI/CD, Cron, Systemd)

NVM se bazează pe fișierele de inițializare ale shell-ului care nu sunt încărcate în shell-urile non-interactive. Aceasta cauzează erori `node: command not found` în job-urile cron, fișierele de unitate systemd și unele medii CI.

Soluția 1: Utilizați calea completă a binarului

“`bash

/home/username/.nvm/versions/node/v20.14.0/bin/node /path/to/app.js

“`

Soluția 2: Încărcați NVM explicit în scripturi

“`bash

#!/bin/bash

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

nvm use 20.14.0

node /path/to/app.js

“`

Soluția 3: Creați un symlink pentru acces la nivel de sistem (utilizați cu precauție)

“`bash

sudo ln -s /home/username/.nvm/versions/node/v20.14.0/bin/node /usr/local/bin/node

“`

Această abordare sacrifică izolarea per utilizator, dar este uneori necesară pentru serviciile systemd care rulează ca utilizator de serviciu dedicat.

NVM pe hosting partajat vs. VPS vs. servere dedicate

MediuCompatibilitate NVMNote
Hosting partajatNesuportatFără acces shell; utilizați Node.js furnizat de platformă
[VPS Hosting](https://alexhost.com/vps/)ExcelentAcces complet la shell; izolarea per utilizator funcționează perfect
[Servere Dedicate](https://alexhost.com/dedicated-servers/)ExcelentIdeal pentru medii cu mai multe proiecte și runnere CI
Containere DockerParțialLuați în considerare utilizarea imaginilor Docker oficiale Node.js în schimb
Web Hosting PartajatNesuportatFără acces SSH în majoritatea configurațiilor

Pentru echipele care rulează aplicații Node.js alături de alte servicii, un VPS vă oferă controlul la nivel de shell pe care NVM îl necesită, fără suprasarcina gestionării hardware-ului fizic.

Listă de verificare practică cu concluzii cheie

Utilizați aceasta ca referință pentru implementare și configurare:

  • Verificați tipul shell-ului (`echo $SHELL`) înainte de instalare — Zsh și Bash necesită fișiere de profil diferite
  • Utilizați întotdeauna `–lts` pentru instalările Node.js de producție; rezervați `node` (latest) pentru lucrări experimentale
  • Includeți `.nvmrc` în controlul versiunilor astfel încât fiecare membru al echipei și runner CI să folosească versiunea identică de runtime
  • Utilizați `–reinstall-packages-from` la actualizarea versiunilor Node.js pentru a evita reinstalarea manuală a instrumentelor globale
  • Încărcați NVM explicit în orice script non-interactiv (cron, systemd, pipeline-uri CI) — nu presupuneți niciodată că profilul shell a fost încărcat
  • Auditați pachetele globale per versiune cu `npm list -g –depth=0` după comutarea versiunilor pentru a detecta timpuriu dependențele lipsă
  • Fixați versiuni exacte în `.nvmrc` (ex. `20.14.0`) mai degrabă decât aliasuri (ex. `lts`) pentru reproductibilitate maximă în producție
  • Verificați `which node` după comutarea versiunilor pentru a confirma că nu folosiți accidental un binar instalat la nivel de sistem

Întrebări frecvente

NVM necesită acces sudo sau root pentru a instala Node.js?

Nu. NVM instalează totul sub `~/.nvm` în directorul home al utilizatorului curent. Nu sunt necesare privilegii de root pentru instalarea sau comutarea versiunilor Node.js. Acesta este unul dintre principalele sale avantaje față de managerii de pachete la nivel de sistem.

De ce apare `nvm: command not found` după instalare?

Blocul de inițializare NVM a fost adăugat în profilul dvs. shell, dar profilul nu a fost reîncărcat în sesiunea curentă. Rulați `source ~/.bashrc` (Bash) sau `source ~/.zshrc` (Zsh). Dacă eroarea persistă după deschiderea unui terminal nou, verificați că blocul de inițializare a fost de fapt scris în fișierul corect folosind `grep NVM_DIR ~/.bashrc`.

Pot mai mulți utilizatori de pe același server să aibă versiuni diferite de Node.js prin NVM?

Da. Deoarece NVM instalează în directorul home al fiecărui utilizator (`~/.nvm`), fiecare utilizator menține un set complet independent de versiuni Node.js și pachete globale. Aceasta este arhitectura corectă pentru serverele multi-tenant.

Ce se întâmplă cu pachetele npm instalate global când comut versiunile Node.js cu NVM?

Fiecare versiune Node.js are propriul director de pachete globale izolat. Pachetele instalate global sub o versiune nu sunt vizibile pentru alta. Utilizați `nvm install <new-version> –reinstall-packages-from=<old-version>` pentru a le migra automat.

Este NVM potrivit pentru rularea aplicațiilor Node.js în producție pe un server?

NVM este bine adaptat pentru gestionarea versiunii Node.js utilizate, dar pentru gestionarea proceselor în producție ar trebui să îl combinați cu un manager de procese precum PM2 sau să utilizați fișiere de unitate systemd. Asigurați-vă că acele medii non-interactive încarcă explicit NVM sau referențiază calea completă a binarului, așa cum este descris în secțiunea CI/CD de mai sus.

15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți