package.json în Node.js

Module și package.json npm 1.0; "type" din Node.js 12.0

Fișierul de configurare al unui proiect Node.js: nume, versiune, tipul modulelor, scripturi, dependențe și versiunea Node cerută.

Sintaxă
{
  "name": "magazin",
  "version": "1.0.0",
  "type": "module",
  "scripts": { "start": "node index.js" },
  "engines": { "node": ">=22" },
  "dependencies": {},
  "devDependencies": {}
}

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âmpul description sau un fișier README.
  • Muți o dependență necesară la rulare în devDependencies: la npm ci --omit=dev pe server, pachetul lipsește și aplicația pică.
  • Schimbi "type" în "module" într-un proiect vechi: toate fișierele .js care folosesc require nu mai merg. Redenumește-le în .cjs sau 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.