npm și package.json
Dependențe vs devDependencies, semver și range-uri, lock file, comenzi.
Actualizat
Ce este npm
npm e două lucruri: un registru online cu peste 3 milioane de pachete JavaScript (librării scrise de alții) și programul din terminal cu care le instalezi. Când scrii npm i react, npm descarcă React și toate pachetele de care depinde React în folderul node_modules.
Alternative la programul npm, cu același registru: pnpm (rapid, economisește spațiu), yarn, bun. Alegi unul per proiect — fișierul lock arată care.
package.json — buletinul proiectului
{
"name": "learn-js",
"type": "module",
"scripts": {
"dev": "next dev",
"build": "next build",
"lint": "eslint"
},
"dependencies": {
"next": "16.4.0",
"react": "19.3.0"
},
"devDependencies": {
"typescript": "^5",
"eslint": "^9"
}
}| Câmp | Rol |
|---|---|
scripts |
comenzi rulate cu npm run <nume> (dev, build, test) |
dependencies |
pachete de care aplicația are nevoie ca să ruleze (react, next, zod) |
devDependencies |
pachete necesare doar în dezvoltare / build (typescript, eslint, vitest, tipuri @types/*) |
type: "module" |
fișierele .js sunt ES modules (import/export) |
engines |
ce versiune de Node e necesară |
Versiuni: semver și range-uri
Versiunile urmează semver: MAJOR.MINOR.PATCH. În package.json scrii un range — ce versiuni accepți:
| Range | Acceptă | Exemplu pentru 1.4.2 |
|---|---|---|
1.4.2 |
exact această versiune | doar 1.4.2 |
^1.4.2 |
același major — minor și patch noi | 1.4.2 … 1.99.x, nu 2.0.0 |
~1.4.2 |
același minor — doar patch-uri | 1.4.2 … 1.4.x |
* / latest |
orice | periculos |
^ e implicit la npm i. Pentru aplicații, multe echipe preferă versiuni exacte (npm i -E) + actualizări controlate (Renovate, Dependabot).
Fișierul lock
package-lock.json (sau pnpm-lock.yaml) notează versiunea exactă a fiecărui pachet instalat, inclusiv a dependențelor indirecte. Rezultat: tu, colegii, CI-ul și Vercel instalează exact același lucru.
| Regulă | De ce |
|---|---|
| lock-ul intră în Git | instalări identice peste tot |
node_modules nu intră în Git |
se reconstruiește din lock |
în CI folosești npm ci |
instalează strict din lock, eșuează dacă nu se potrivește |
Comenzile de zi cu zi
| Comandă | Ce face |
|---|---|
npm i |
instalează tot din package.json / lock |
npm i zod / npm i -D vitest |
adaugă dependență / devDependency |
npm run dev |
rulează scriptul dev |
npx <pachet> |
rulează un program fără să-l instalezi global (npx create-next-app) |
npm outdated |
ce pachete au versiuni noi |
npm uninstall <pachet> |
șterge |
npm audit |
vulnerabilități cunoscute |
Cum alegi un pachet
Înainte de npm i, verifică: e întreținut (ultimul release recent)? câte descărcări săptămânale are? cât de mare e (bundlephobia / pkg-size)? are tipuri TypeScript? Și întrebarea cea mai bună: chiar am nevoie de el? — Intl, structuredClone, fetch, crypto.randomUUID sunt native.
Pe scurt
package.json= scripturi + dependențe;devDependenciesdoar pentru dezvoltare.^acceptă minor și patch;~doar patch; exact = fără surprize.- Lock-ul în Git,
node_modulesniciodată;npm ciîn CI.