Cum să Instalezi și să Configurezi Node.js și NPM pe Windows
Node.js este un runtime JavaScript open-source, cross-platform, construit pe motorul V8 al Chrome, care execută cod JavaScript în afara unui browser. NPM (Node Package Manager) este managerul de pachete implicit inclus cu Node.js, oferind acces la peste două milioane de pachete reutilizabile. Împreună, formează lanțul de instrumente de bază pentru construirea aplicațiilor server-side, instrumentelor CLI, REST API-urilor și proiectelor JavaScript full-stack pe Windows.
Acest ghid acoperă fluxul complet de instalare, verificare, configurare și prima aplicație pentru Node.js și NPM pe Windows — inclusiv gestionarea versiunilor, depanarea PATH, scopul pachetelor globale vs. locale și considerații de nivel producție pe care majoritatea tutorialelor le omit.
Alegerea versiunii corecte de Node.js înainte de instalare
Calendarul de lansări Node.js urmează un ritm previzibil care îți influențează direct alegerea:
| Tip lansare | Stabilitate | Caz de utilizare | Fereastră de suport |
|---|
| — | — | — | — |
|---|
| **LTS (Long-Term Support)** | Ridicată | Sarcini de producție, medii de echipă | 30 de luni |
|---|
| **Current** | Moderată | Accesarea celor mai recente funcții ale motorului V8 | 6 luni |
|---|
| **Nightly / RC** | Experimentală | Contribuitori de bază, testare bleeding-edge | Fără garanție |
|---|
Versiunile LTS au numere de versiune majoră pare (ex.: 20.x, 22.x) și primesc patch-uri critice de securitate timp de 30 de luni. Lansările Current au numere de versiune majoră impare și trec la statutul LTS după șase luni dacă îndeplinesc criteriile de stabilitate.
Pentru majoritatea dezvoltatorilor și implementărilor pe server — inclusiv aplicațiile găzduite pe VPS Hosting — LTS este alegerea corectă. Ramura Current este potrivită doar atunci când ai nevoie în mod specific de o funcție V8 sau de un API Node.js care nu a ajuns încă în linia LTS activă.
NVM pentru Windows: Alternativa profesională la instalarea directă
Înainte de a continua cu programul de instalare MSI, ia în considerare dacă ai nevoie de nvm-for-windows (Node Version Manager pentru Windows). Programul de instalare direct leagă sistemul tău de o singură versiune Node.js. NVM îți permite să instalezi mai multe versiuni alături și să comuti între ele per proiect — esențial atunci când menții baze de cod legacy alături de cele moderne.
Instalează nvm-for-windows de pe pagina oficială de lansări GitHub, apoi folosește:
“`
nvm install 20.14.0
nvm use 20.14.0
nvm list
“`
Dacă gestionezi un singur proiect sau înveți Node.js pentru prima dată, programul de instalare MSI este suficient. Pentru medii profesionale, NVM este recomandat cu tărie.
Pasul 1: Descărcarea programului de instalare Node.js
- Navighează la site-ul oficial Node.js la nodejs.org.
- Selectează fila LTS și descarcă Windows Installer (`.msi`) pentru arhitectura ta. Aproape toate mașinile Windows moderne sunt pe 64 de biți (`node-v20.x.x-x64.msi`). Build-urile ARM64 sunt disponibile pentru dispozitivele Windows pe ARM.
- Verifică suma de control SHA-256 a fișierului descărcat față de valorile publicate pe pagina de descărcări Node.js înainte de a executa programul de instalare. Acest pas este obligatoriu în orice mediu conștient de securitate.
Pentru a verifica suma de control în PowerShell:
“`powershell
Get-FileHash .node-v20.14.0-x64.msi -Algorithm SHA256
“`
Compară rezultatul cu hash-ul publicat. O nepotrivire indică o descărcare coruptă sau alterată.
Pasul 2: Instalarea Node.js și NPM
- Fă dublu clic pe fișierul `.msi` descărcat pentru a lansa Expertul de configurare.
- Fă clic pe Next pe ecranul de bun venit.
- Acceptă Acordul de licență pentru utilizatorul final și fă clic pe Next.
- Calea de instalare implicită este `C:Program Filesnodejs`. Cu excepția cazului în care ai un motiv specific pentru a o schimba (ex.: o unitate non-sistem pentru gestionarea spațiului pe disc), las-o neschimbată.
- Pe ecranul Custom Setup, confirmă că npm package manager este selectat. Este activat implicit.
- Pe ecranul Tools for Native Modules, vei vedea o opțiune pentru a instala automat Chocolatey, Python și Visual Studio Build Tools. Bifează această casetă dacă anticipezi instalarea de pachete NPM care includ addon-uri native C++ (ex.: `bcrypt`, `sharp`, pachete dependente de `node-gyp`). Acest pas instalează câțiva gigaocteți de instrumente — omite-l dacă ai nevoie doar de pachete JavaScript pure.
- Fă clic pe Install, apoi pe Finish.
Programul de instalare înregistrează automat `node.exe` și `npm.cmd` în variabila de mediu `PATH` a sistemului tău sub `C:Program Filesnodejs`.
Ce face de fapt programul de instalare sistemului tău
Înțelegerea efectelor secundare previne viitoarele dureri de cap la depanare:
- Adaugă `C:Program Filesnodejs` la System PATH (disponibil pentru toți utilizatorii).
- Creează `C:Users<username>AppDataRoamingnpm` ca prefix implicit pentru pachetele globale.
- Înregistrează Node.js în registrul Windows sub `HKLMSOFTWARENode.js`.
- Instalează `npx` (executorul de pachete NPM) alături de `npm`.
Pasul 3: Verificarea instalării
Deschide o fereastră nouă de Command Prompt sau PowerShell. Calificativul „nouă” contează — sesiunile de terminal existente memorează în cache vechiul PATH și nu vor reflecta modificările programului de instalare.
“`
node -v
“`
Rezultat așteptat: `v20.14.0` (sau versiunea ta instalată)
“`
npm -v
“`
Rezultat așteptat: `10.x.x`
“`
npx -v
“`
Rezultat așteptat: se potrivește sau este aproape de versiunea npm
Dacă `node` nu este recunoscut, PATH-ul nu a fost actualizat corect. Remediază-l manual:
- Deschide System Properties > Advanced > Environment Variables.
- Sub System variables, găsește `Path` și fă clic pe Edit.
- Adaugă `C:Program Filesnodejs` dacă lipsește.
- Fă clic pe OK, închide toate ferestrele de terminal și redeschide-le.
Diagnosticarea problemelor comune după instalare
Problemă: `npm` este recunoscut, dar `node` nu este (sau invers).
Cauză: O intrare PATH parțială sau o instalare conflictuală din Chocolatey sau o configurare anterioară NVM.
Remediere: Rulează `where node` și `where npm` pentru a identifica ce binare sunt rezolvate. Elimină intrările învechite.
Problemă: Erori de permisiuni `EACCES` la rularea `npm install -g`.
Cauză: Directorul prefixului global nu are permisiuni de scriere pentru utilizatorul curent.
Remediere: Schimbă prefixul global într-un director deținut de utilizator (acoperit în Pasul 5).
Problemă: `node` deschide Microsoft Store în loc să ruleze Node.js.
Cauză: Windows 10/11 vine cu un App Execution Alias pentru `node` care redirecționează către Store.
Remediere: Mergi la Settings > Apps > App execution aliases și dezactivează aliasurile pentru `python.exe` și `node.exe` (dacă există).
Pasul 4: Actualizarea NPM la cea mai recentă versiune
Versiunea NPM inclusă cu un program de instalare Node.js este de obicei cu una sau două versiuni minore în urma lansării curente. Actualizează-o imediat după instalare:
“`
npm install -g npm@latest
“`
Flag-ul `-g` instalează pachetul în directorul prefixului global, făcându-l disponibil la nivel de sistem. După actualizare, reverifică:
“`
npm -v
“`
Caz limită important: Pe Windows, actualizarea NPM global poate lăsa ocazional un `npm.cmd` învechit în `C:Program Filesnodejs` care indică spre versiunea veche, în timp ce noua versiune este instalată în `C:Users<username>AppDataRoamingnpm`. Dacă `npm -v` afișează în continuare versiunea veche după actualizare, verifică ce binar apare primul în PATH:
“`
where npm
“`
Calea de sub `AppDataRoamingnpm` ar trebui să apară înaintea `C:Program Filesnodejs` în rezultat. Dacă nu, reordonează intrările PATH în consecință.
Pasul 5: Configurarea NPM pentru mediul tău
Configurația NPM este stocată într-un fișier `.npmrc`, care poate exista la trei niveluri: per proiect, per utilizator (`C:Users<username>.npmrc`) și global (`C:Program Filesnodejsnode_modulesnpmnpmrc`). Setările per proiect le suprascriu pe cele per utilizator, care le suprascriu pe cele globale.
Schimbarea prefixului pachetelor globale
Prefixul global implicit (`AppDataRoamingnpm`) funcționează pentru majoritatea utilizatorilor, dar pe servere partajate sau când se aplică cote de disc, poate fi necesar să îl redirecționezi:
“`
npm config set prefix "D:NodeGlobal"
“`
După schimbarea prefixului, adaugă noul subdirector `bin` la PATH-ul tău:
“`
setx PATH "%PATH%;D:NodeGlobal"
“`
Configurarea unui registru privat sau mirror
Mediile corporative și serverele izolate folosesc frecvent un registru NPM privat (Verdaccio, Nexus, Artifactory):
“`
npm config set registry "https://your-private-registry.example.com/"
“`
Pentru autentificarea față de un registru privat:
“`
npm login –registry=https://your-private-registry.example.com/
“`
Doar pentru pachete cu domeniu de aplicare (ex.: `@mycompany/*`), poți direcționa doar acel domeniu către un registru privat, lăsând registrul public intact:
“`
npm config set @mycompany:registry "https://your-private-registry.example.com/"
“`
Configurarea unui proxy HTTP
Dacă mașina ta Windows se află în spatele unui proxy corporativ:
“`
npm config set proxy "http://proxy.company.com:8080"
npm config set https-proxy "http://proxy.company.com:8080"
“`
Auditarea tuturor setărilor curente
“`
npm config list
npm config list –json
“`
Flag-ul `–json` produce configurație citibilă de mașină, utilă pentru scriptare și diagnosticarea pipeline-urilor CI/CD.
Referință utilă pentru configurarea NPM
| Cheie de configurare | Valoare implicită | Scop |
|---|
| — | — | — |
|---|
| `prefix` | `%APPDATA%npm` | Locația de instalare a pachetelor globale |
|---|
| `registry` | `https://registry.npmjs.org/` | Registrul sursă al pachetelor |
|---|
| `cache` | `%APPDATA%npm-cache` | Directorul de cache al pachetelor locale |
|---|
| `save-exact` | `false` | Fixează versiunile exacte în `package.json` |
|---|
| `fund` | `true` | Afișează mesaje de finanțare după instalare |
|---|
| `audit` | `true` | Rulează auditul de securitate la instalare |
|---|
Pasul 6: Crearea și rularea unei aplicații Node.js
Inițializarea proiectului
“`
mkdir my-node-app
cd my-node-app
npm init -y
“`
`npm init -y` generează un `package.json` cu valori implicite derivate din numele directorului și configurația ta de utilizator NPM. Fișierul `package.json` este manifestul aplicației tale — definește punctul de intrare, scripturile, dependențele și metadatele.
Construirea unui server HTTP de bază
Creează `app.js` în directorul proiectului:
“`javascript
// app.js
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, World!n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
“`
Rulează-l:
“`
node app.js
“`
Navighează la `http://127.0.0.1:3000/` în browserul tău. Ar trebui să vezi `Hello, World!`.
Notă tehnică: Node.js folosește o buclă de evenimente single-threaded susținută de libuv pentru operațiunile I/O. Callback-ul `http.createServer` se declanșează la fiecare cerere primită fără a bloca bucla. Această arhitectură face Node.js extrem de eficient pentru sarcini de lucru I/O-bound, dar nepotrivit pentru sarcini CPU-intensive fără fire de lucru sau procese copil.
Adăugarea framework-ului Express
Express este framework-ul HTTP standard de facto pentru Node.js, oferind rutare, suport pentru middleware și o abstractizare curată a cererii/răspunsului:
“`
npm install express
“`
Aceasta instalează Express local (în `node_modules/`) și îl înregistrează ca dependență în `package.json`. Actualizează `app.js`:
“`javascript
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello from Express!');
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
“`
“`
node app.js
“`
Vizitează `http://localhost:3000/` pentru a confirma răspunsul.
Înțelegerea `node_modules` și `.gitignore`
Directorul `node_modules` poate conține sute de megaocteți de fișiere. Nu îl include niciodată în controlul versiunilor. Creează un fișier `.gitignore`:
“`
node_modules/
.env
“`
Colaboratorii și pipeline-urile de implementare restaurează dependențele rulând `npm install`, care citește `package.json` și `package-lock.json` pentru a reproduce arborele exact de dependențe.
Pasul 7: Gestionarea pachetelor — Local vs. Global
Înțelegerea distincției dintre instalarea locală și globală a pachetelor este una dintre cele mai frecvente surse de confuzie pentru cei care încep cu Node.js.
| Domeniu | Comandă de instalare | Locație | Caz de utilizare |
|---|
| — | — | — | — |
|---|
| **Local** | `npm install <pkg>` | `./node_modules/` | Dependențele aplicației |
|---|
| **Local Dev** | `npm install –save-dev <pkg>` | `./node_modules/` | Instrumente de build, runnere de teste |
|---|
| **Global** | `npm install -g <pkg>` | `%APPDATA%npm` | Instrumente CLI (ex.: `nodemon`, `pm2`) |
|---|
Regulă cheie: Dacă un pachet oferă un instrument de linie de comandă pe care îl dorești disponibil peste tot (ex.: `nodemon`, `eslint`, `typescript`), instalează-l global. Dacă este o bibliotecă pe care aplicația ta o importă cu `require()` sau `import`, instalează-o local.
Rularea aplicațiilor în producție cu PM2
Pentru orice aplicație Node.js implementată pe un server — fie pe o instanță de VPS Hosting sau pe un Server Dedicat — rularea directă a `node app.js` este insuficientă. Procesul se va termina dacă terminalul se închide sau apare o excepție netreatată.
PM2 este managerul de procese standard pentru Node.js în producție:
“`
npm install -g pm2
pm2 start app.js –name "my-app"
pm2 startup
pm2 save
“`
`pm2 startup` generează o comandă pentru a configura PM2 să repornească automat aplicația la repornirea sistemului. `pm2 save` persistă lista curentă de procese.
Pasul 8: Întărirea securității și auditul
Rularea unui audit al dependențelor
“`
npm audit
“`
NPM face referință încrucișată a pachetelor tale instalate față de GitHub Advisory Database. Orice vulnerabilități cunoscute sunt raportate cu niveluri de severitate (scăzut, moderat, ridicat, critic) și căi de remediere.
“`
npm audit fix
“`
Aceasta actualizează automat pachetele vulnerabile la cea mai apropiată versiune patch-uită fără modificări majore. Pentru modificări majore, revizuiește rezultatul și actualizează manual.
Fixarea versiunilor dependențelor
În `package.json`, NPM folosește implicit intervale de versionare semantică (`^1.2.3` permite actualizări minore și de patch). În producție, fixează versiunile exacte pentru a preveni surprizele din lanțul de aprovizionare:
“`
npm config set save-exact true
“`
Sau înlocuiește manual prefixele `^` cu șiruri de versiune exacte în `package.json` și include fișierul `package-lock.json` în commit.
Evitarea rulării NPM ca Administrator
Rularea `npm install -g` cu privilegii ridicate scrie fișiere deținute de contul Administrator, ceea ce poate cauza erori de permisiuni pentru operațiunile ulterioare fără privilegii ridicate. Configurează un prefix global deținut de utilizator (vezi Pasul 5) pentru a elimina complet necesitatea privilegiilor ridicate.
Implementarea aplicațiilor Node.js pe un server
Dezvoltarea locală este doar prima etapă. Implementarea în producție introduce cerințe suplimentare: gestionarea proceselor, proxy invers, terminarea TLS și gestionarea variabilelor de mediu.
Un stack tipic de producție pe o instanță Linux VPS Hosting asociază Node.js cu Nginx ca proxy invers. Nginx gestionează terminarea TLS (folosind certificate de la un furnizor precum Certificate SSL) și redirecționează cererile către procesul Node.js care ascultă pe un port local.
Pentru echipele care preferă un mediu cu panou de control gestionat, VPS cu cPanel oferă gestionarea aplicațiilor Node.js prin interfața cPanel, simplificând implementarea fără a necesita configurare directă SSH.
Configurația specifică mediului (credențiale baze de date, chei API, numere de port) nu trebuie niciodată codificată direct. Folosește un fișier `.env` cu pachetul `dotenv`:
“`
npm install dotenv
“`
“`javascript
require('dotenv').config();
const port = process.env.PORT || 3000;
“`
Matricea de decizie: Când să folosești fiecare metodă de instalare
| Scenariu | Abordare recomandată |
|---|
| — | — |
|---|
| Proiect unic, învățarea Node.js | Program de instalare MSI, versiunea LTS |
|---|
| Mai multe proiecte cu versiuni diferite de Node.js | nvm-for-windows |
|---|
| Pipeline CI/CD pe Windows Server | Program de instalare MSI sau Chocolatey (`choco install nodejs-lts`) |
|---|
| Server Linux de producție | Manager de pachete (apt/yum) sau nvm |
|---|
| Aplicație containerizată | Imagine Docker oficială `node` |
|---|
| Mediu corporativ izolat | MSI offline + registru NPM privat (Verdaccio) |
|---|
Concluzii tehnice cheie
- Instalează întotdeauna versiunea LTS pentru producție și medii de echipă. Folosește lansarea Current doar când este necesară o funcție specifică V8 sau API Node.js.
- Folosește nvm-for-windows în orice mediu unde mai multe versiuni Node.js trebuie să coexiste.
- Verifică suma de control SHA-256 a programului de instalare înainte de execuție.
- Schimbă prefixul global NPM într-un director deținut de utilizator pentru a evita erorile de permisiuni și a elimina necesitatea privilegiilor ridicate.
- Nu include niciodată `node_modules/` în controlul versiunilor. Include întotdeauna `package-lock.json`.
- Rulează `npm audit` după fiecare `npm install` în pipeline-urile de producție.
- Folosește PM2 pentru gestionarea proceselor în orice implementare pe server — nu rula niciodată `node app.js` direct în producție.
- Termină TLS la nivelul proxy-ului invers (Nginx, Caddy) mai degrabă decât în interiorul procesului Node.js pentru performanță mai bună și gestionarea certificatelor.
- Stochează secretele în variabile de mediu încărcate prin `dotenv`, niciodată în codul sursă.
Întrebări frecvente
Care este diferența dintre Node.js LTS și Current pe Windows?
Versiunile LTS primesc patch-uri de securitate și stabilitate timp de 30 de luni și au numere de versiune majoră pare (18, 20, 22). Versiunile Current includ cele mai recente funcții de limbaj și runtime, dar sunt suportate doar șase luni înainte de a trece la LTS sau de a fi abandonate. Pentru implementările Windows de producție, folosește întotdeauna LTS.
De ce eșuează `npm install -g` cu o eroare de permisiuni pe Windows?
Prefixul global implicit (`C:Users<username>AppDataRoamingnpm`) nu are ocazional permisiuni de scriere din cauza politicilor UAC sau a instalărilor anterioare rulate ca Administrator. Soluția este fie să rulezi terminalul ca Administrator (nu recomandat pe termen lung), fie să reconfigurezi prefixul global într-un director deținut de contul tău de utilizator cu `npm config set prefix "C:yourpath"`.
Pot rula mai multe versiuni Node.js simultan pe Windows?
Da, folosind nvm-for-windows. Instalează-l, apoi folosește `nvm install <version>` și `nvm use <version>` pentru a comuta runtime-ul activ. Fiecare versiune își menține propriul director de pachete globale, prevenind conflictele între versiuni.
Ce este `package-lock.json` și ar trebui să îl includ în commit?
`package-lock.json` este o înregistrare exactă și deterministă a întregului arbore de dependențe rezolvat în timpul `npm install`. Asigură că fiecare dezvoltator și fiecare rulare CI/CD instalează versiuni identice de pachete. Include-l întotdeauna în controlul versiunilor și nu îl edita manual niciodată.
Cum rulez o aplicație Node.js automat la pornirea Windows fără un server?
Pentru mașinile de dezvoltare, folosește PM2 cu `pm2 startup` și `pm2 save`. Pentru integrarea cu Windows Service, instrumente precum `node-windows` împachetează un proces Node.js ca Windows Service nativ, permițând gestionarea prin snap-in-ul Services MMC și repornirea automată la eroare sau repornire.
