Node jappoġġa żewġ sistemi ta' moduli: CommonJS (CJS) — l-oriġinali, tuża require/module.exports — u ES Modules (ESM) — l-istandard, tuża import/. Huma jdifferenzjaw fis-sintassi, il-komportament tal-ħmigħ, u l-interop.
Node jappoġġa żewġ sistemi ta' moduli: CommonJS (CJS) — l-oriġinali, tuża require/module.exports — u ES Modules (ESM) — l-istandard, tuża import/. Huma jdifferenzjaw fis-sintassi, il-komportament tal-ħmigħ, u l-interop.
export// math.js
function add(a, b) { return a + b; }
module.exports = { add };
// app.js
const { add } = require("./math"); // synchronous, runtime
// math.mjs (or .js with "type": "module")
export function add(a, b) { return a + b; }
export default something;
// app.mjs
import { add } from "./math.mjs"; // static, hoisted
CommonJS ES Modules
Syntax require/module.exports import/export
Loading synchronous, runtime static, hoisted
Top-level await no yes
Tree-shaking hard yes (statically analyzable)
File extension .cjs / .js (default) .mjs / .js with "type":"module"
__dirname/__filename available not available (use import.meta.url)
// package.json
{ "type": "module" } // now .js files are treated as ESM
Jew uża l-estensjoni .mjs b'mod espliċitu. Mingħajr dan, Node jassenja .js għal CommonJS b'mod default.
// ESM can import CommonJS:
import pkg from "some-cjs-lib"; // works (default import)
// CommonJS CANNOT require() a pure-ESM package (it's async):
const esm = require("esm-only-pkg"); // ❌ ERR_REQUIRE_ESM
// must use dynamic import: const esm = await import("esm-only-pkg");
L-ħruff aspra: CJS ma jistax require() paketti ESM-only — uġigħ migrazzjoni komuni. Innota wkoll li ESM m'għandux __dirname (uża import.meta.url).
Il-għarfien ta' ż-żewġ sistemi huma essenzjali għax-xogħol Node reali: ESM hija l-futur (istandard, tree-shakeable, top-level await, allinjata mad-dixxavaccini) u l-għażla t-tajba għal proġetti ġodda, imma partita kbira tal-ekosistema npm u l-kodiċi eżistenti huma CommonJS.
L-għarfien tad-differenzi tas-sintassi, kif l-attivazzjoni ta' ESM ("type": "module"), u l-limitazzjonijiet ta' interop (speċjalment CJS-ma-jistax-require-ESM) jipprevjenu l-kunfużjoni u l-iżbalji ta' sikwl li joħorġu meta jiġu msejsa ż-żewġ sistemi.