Ce face package.json
package.json stă în rădăcina proiectului și îl descrie: name și version (obligatorii doar dacă publici pachetul), description, license. Îl creezi cu npm init, iar npm îl actualizează când instalezi pachete.
Câmpurile pe care le citește Node.js: "type" ("module" face ca fișierele .js să fie module ES; implicit "commonjs"), "exports" și "main" (punctul de intrare când pachetul este importat), "imports" (alias-uri interne care încep cu #). node --run citește "scripts".
Câmpurile pentru npm: "scripts" (comenzi rulate cu npm run), "dependencies" (pachetele necesare la rulare), "devDependencies" (doar pentru dezvoltare: teste, linter), "engines" (versiunile de Node.js acceptate; la instalarea unui pachet care cere altă versiune, npm afișează avertismentul EBADENGINE, iar cu setarea engine-strict=true oprește instalarea), "private": true (împiedică publicarea din greșeală).
Parametri
| Parametru | Descriere |
|---|---|
name, version |
Numele (litere mici, fără spații) și versiunea semver a pachetului. |
type |
"module" sau "commonjs": cum sunt citite fișierele .js. |
scripts |
Comenzi cu nume, rulate cu npm run nume sau node --run nume. |
dependencies / devDependencies |
Pachetele și intervalele de versiuni acceptate. |
engines |
Versiunile de Node.js (și npm) pe care merge proiectul, de exemplu {"node": ">=22"}. |
exports / main / imports |
Ce fișiere expune pachetul și alias-urile interne. |
private |
true blochează npm publish. |
Exemple
Exemplul 1: Un package.json complet pentru o aplicație
{
"name": "magazin-online",
"version": "1.2.0",
"description": "Magazin online pentru produse din Iași",
"private": true,
"type": "module",
"main": "src/index.js",
"scripts": {
"start": "node src/index.js",
"dev": "node --watch --env-file=.env src/index.js",
"test": "node --test"
},
"engines": {
"node": ">=22"
},
"dependencies": {
"express": "^5.1.0"
},
"devDependencies": {
"eslint": "^9.30.0"
}
}
Exemplul 2: Câmpul „type” schimbă felul în care e citit .js
Același fișier .js cu export este modul ES doar dacă package.json spune "type": "module".
import { mkdirSync, writeFileSync } from "node:fs";
mkdirSync("proiect", { recursive: true });
writeFileSync("proiect/package.json", JSON.stringify({ name: "proiect", type: "module" }));
writeFileSync("proiect/salut.js", 'export const mesaj = "Salut din Iași";');
const { mesaj } = await import("./proiect/salut.js");
console.log(mesaj);
Rezultat
Salut din Iași
Exemplul 3: Citirea package.json din cod
Fișierele JSON se pot importa direct, cu atributul type: "json" (stabil din Node.js 22.12 / 23.1).
import { writeFileSync } from "node:fs";
writeFileSync("package.json", JSON.stringify({
name: "magazin", version: "2.0.1", engines: { node: ">=22" },
}));
const { default: pachet } = await import("./package.json", { with: { type: "json" } });
console.log(`${pachet.name} v${pachet.version}, Node ${pachet.engines.node}`);
Rezultat
magazin v2.0.1, Node >=22
Greșeli frecvente
- Pui comentarii în
package.json: JSON nu acceptă comentarii, iar npm dă eroare. Folosește câmpuldescriptionsau un fișier README. - Muți o dependență necesară la rulare în
devDependencies: lanpm ci --omit=devpe server, pachetul lipsește și aplicația pică. - Schimbi
"type"în"module"într-un proiect vechi: toate fișierele.jscare folosescrequirenu mai merg. Redenumește-le în.cjssau convertește-le.
Comenzi înrudite
npm init: Creează fișierul package.json al unui proiect nou; cu -y acceptă valorile implicite fără întrebări.package.json "exports" și "imports": Alege ce fișiere ale unui pachet pot fi importate din afară (exports) și definește alias-uri interne cu # (imports).Module ES (import) și CommonJS (require): Cele două sisteme de module din Node.js: import/export (ES) și require/module.exports (CommonJS), și cum le combini.npm run: Rulează un script din câmpul „scripts” al package.json, cu node_modules/.bin în PATH și cu scripturile pre/post.Versiuni semver (^, ~, >=): Cum citește npm versiunile MAJOR.MINOR.PATCH și intervalele ^, ~, >=, x din package.json.package-lock.json: Fișierul în care npm notează versiunea exactă a fiecărui pachet instalat, ca toată lumea să primească același node_modules.