npm (Node Package Manager) — managerul standard de pachete pentru platforma Node.js, inclus în pachetul de instalare Node.js. npm gestionează dependențele proiectelor JavaScript și TypeScript: instalează biblioteci în node_modules, actualizează versiunile pachetelor, rezolvă conflicte de versiuni. package.json — fișierul central de configurare cu metadate și lista de dependențe. npm Registry — cel mai mare registru de pachete. Mai multe pe npm Registry.
Principalele puncte
npm a fost creat în 2010 de Isaac Schlueter ca soluție pentru gestionarea dependențelor Node.js. Din 2014 npm este gestionat de compania npm, Inc., achiziționată de Microsoft/GitHub în 2020. Instrumentul constă din două părți: CLI (linie de comandă) pentru instalarea și gestionarea pachetelor, și Registry — depozitul central al tuturor modulelor publicate la adresa registry.npmjs.org.
npm Registry — cel mai mare registru de pachete: peste 2 milioane de pachete și peste 10 miliarde de descărcări lunar. Fiecare pachet are versiune SemVer, descriere, dependențe, licență și autor. Publicarea propriului pachet se face prin npm publish. npm suportă pachete scoped pentru organizații (@scope/package), registre private și audit de securitate încorporat.
Node.js versiunea 18+ include npm 9+ cu performanță îmbunătățită, workspaces pentru monorepozitorii și mecanism reproiectat de peer dependencies. Ecosistemul npm acoperă JavaScript pe server, frontend (React, Vue, Angular), dezvoltare mobilă (React Native), instrumente de build (Webpack, Vite) și utilitare CLI. npm este canalul principal de distribuție a bibliotecilor JavaScript.
npm install — comanda principală care citește package.json și package-lock.json pentru a instala toate dependențele în node_modules. La prima rulare, npm calculează graful de dependențe, rezolvă conflictele de versiuni și generează package-lock.json. Comanda npm install <package> instalează un pachet specific; flagul --save-dev adaugă în devDependencies, --global — global.
npx — executantul de pachete, inclus în npm de la versiunea 5.2. npx permite rularea utilitarelor CLI fără instalare globală: npx react-native init sau npx create-react-app my-app. npx descarcă pachetul într-un cache temporar și îl rulează, iar după finalizare îl curăță. npx este util și pentru rularea unor versiuni specifice de instrumente.
npm audit scanează arborele de dependențe pentru vulnerabilități cunoscute din baza npm. Comanda afișează un raport cu niveluri de severitate (critical, high, moderate) și recomandă npm audit fix pentru actualizarea automată a pachetelor vulnerabile. npm cache stochează pachetele descărcate local. npm cache clean --force curăță cache-ul la probleme de instalare. npm outdated arată pachetele învechite.
# Comenzile principale npm
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Rulare fără instalare globală
$ npx react-native init MyApp
# Audit de securitate
$ npm audit --fix
package.json — este un fișier JSON în rădăcina proiectului care descrie metadatele, dependențele și configurația acestuia. Câmpuri obligatorii: name (numele unic al pachetului) și version (versiune SemVer, de exemplu 1.0.0). Fișierul se creează cu comanda npm init -y pentru inițializare rapidă sau manual.
Semantic Versioning (SemVer) — standardul de versionare MAJOR.MINOR.PATCH. Versiunea majoră se schimbă la modificări incompatibile ale API, minoră — la adăugarea de funcționalități (compatibilă invers), patch — la corectarea erorilor. Simbolul ^ înaintea versiunii permite actualizări ale versiunii minore și patch, ~ — doar patch.
{
"name": "my-app",
"version": "1.0.0",
"private": true,
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios"
},
"dependencies": {
"react": "^18.3.0",
"react-native": "^0.76.0"
},
"devDependencies": {
"typescript": "^5.5.0",
"@types/react": "^18.3.0"
}
}
| Câmp | Destinație | Valoare exemplu |
|---|---|---|
| scripts | Comenzi de rulare pentru npm run | "start": "node index.js" |
| dependencies | Dependențe de producție ale aplicației | "react": "^18.3.0" |
| devDependencies | Instrumente de dezvoltare și testare | "jest": "^29.7.0" |
| peerDependencies | Dependențe gazdă pentru biblioteci | "react": ">=17.0.0" |
| engines | Cerințe de versiune Node.js | {"node": ">=18.0.0"} |
React Native proiectele utilizează activ npm pentru gestionarea dependențelor. Setul standard include react, react-native, biblioteci de navigație (React Navigation), cereri HTTP (axios), gestionare stare (Redux, Zustand) și componente UI. npm permite instalarea a mii de pachete compatibile din registru.
npx pod-install — comandă obligatorie după instalarea modulelor native în React Native pentru iOS. npm generează automat Podfile.lock pe baza package-lock.json. În proiectele Expo se folosește expo install în loc de npm install, deoarece selectează versiuni compatibile cu versiunea curentă a Expo SDK.
Conflicte de versiuni — problemă frecventă în React Native: react-native-reanimated, react-native-gesture-handler și react-native-safe-area-context necesită versiuni compatibile. Soluție — actualizarea tuturor pachetelor la ultimele versiuni compatibile sau utilizarea --legacy-peer-deps. package-lock.json este critic pentru modulele native compilate prin CocoaPods și Gradle.
npm — managerul standard de pachete, inclus în Node.js. Principalele alternative: yarn (creat de Facebook în 2016) și pnpm (rapid, cu legături hard). Începând cu npm 5, diferența de viteză și funcționalitate între npm și yarn este minimă. npm 7+ a adăugat workspaces, făcându-l competitiv pentru monorepozitorii.
| Caracteristică | npm | yarn | pnpm |
|---|---|---|---|
| Anul creării | 2010 | 2016 | 2017 |
| Fișier lock | package-lock.json | yarn.lock | pnpm-lock.yaml |
| Instalare | Secvențială (npm 5+) | Paralelă | Paralelă |
| Spațiu pe disc | Standard | Standard | Minim (legături) |
| Workspaces | Da (npm 7+) | Da | Da |
| Plug'n'Play | Nu | Da | Nu |
Conform datelor State of JS 2025: npm este folosit de 62% dintre developeri, yarn — 35% (în principal proiecte vechi și fani PnP), pnpm — 3%. Pentru proiecte React Native ambele instrumente sunt echivalente, dar npm apare mai frecvent în proiecte pe Expo SDK 50+ și inițializări noi React Native.
yarn păstrează avantajul în monorepozitorii extrem de mari (100+ pachete) datorită implementării mai mature a workspaces și Plug'n'Play. pnpm câștigă la economisirea spațiului pe disc prin legături hard către magazinul global. Alegerea managerului depinde de preferințele echipei și infrastructură.
Întrebări frecvente
npm install actualizează package-lock.json și poate instala versiuni minore noi în intervalul semantic. npm ci (Clean Install) șterge node_modules și instalează pachetele strict conform package-lock.json fără actualizarea acestuia. npm ci este mai rapid, utilizat în CI/CD și garantează un mediu identic pe toate mașinile. Dacă package-lock.json lipsește, npm ci returnează o eroare.
Începând cu npm 7, conflictele de peer dependencies cauzează erori de build. Soluții: actualizarea tuturor pachetelor la versiuni compatibile prin npm update, utilizarea flagului --legacy-peer-deps pentru modul npm 6, sau adăugarea secțiunii overrides în package.json pentru fixarea forțată a versiunii unui pachet specific. Cea mai bună opțiune — actualizarea dependențelor la versiuni compatibile.
npm audit scanează arborele de dependențe pentru vulnerabilități cunoscute din baza npm Security Advisory. Comanda afișează un raport cu nivel de severitate (critical, high, moderate, low) și recomandă npm audit fix pentru actualizarea automată a pachetelor vulnerabile la versiuni sigure. Rularea regulată a npm audit — o practică de bază de securitate în proiectele JavaScript.
npm workspaces permit gestionarea mai multor pachete într-un singur repozitoriu. Adăugați câmpul "workspaces": ["packages/*"] în package.json rădăcină. Avantaje: instalare unică a tuturor dependențelor într-un node_modules comun, linkuri simbolice automate între pachetele locale, rularea scripturilor pentru toate pachetele din rădăcină, eliminarea duplicării versiunilor.
package-lock.json fixează versiunile exacte ale tuturor dependențelor și pachetelor tranzitive. Fără el, diferiți developeri și servere CI pot primi versiuni diferite de biblioteci în intervalul semantic, ceea ce duce la erori de tip „pe mașina mea funcționează”. Comiterea fișierului lock garantează builduri reproductibile și comportament identic în toate mediile.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și