Το Node υποστηρίζει δύο συστήματα ενοτήτων: CommonJS (CJS) — το αρχικό, χρησιμοποιώντας require/module.exports — και ES Modules (ESM) — το πρότυπο, χρησιμοποιώντας /. Διαφέρουν στη σύνταξη, τη συμπεριφορά φόρτωσης και τη διαλειτουργικότητα.
Το Node υποστηρίζει δύο συστήματα ενοτήτων: CommonJS (CJS) — το αρχικό, χρησιμοποιώντας require/module.exports — και ES Modules (ESM) — το πρότυπο, χρησιμοποιώντας /. Διαφέρουν στη σύνταξη, τη συμπεριφορά φόρτωσης και τη διαλειτουργικότητα.
importexport// 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
Με εναλλακτικά χρησιμοποιήστε την επέκταση .mjs ρητά. Χωρίς αυτό, το Node χρησιμοποιεί ως προεπιλογή .js ως CommonJS.
// 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");
Η τραχιά άκρη: Το CJS δεν μπορεί να require() πακέτα μόνο ESM — ένας συνηθισμένος πόνος μεταφοράς. Επίσης, σημειώστε ότι το ESM δεν έχει __dirname (χρησιμοποιήστε import.meta.url).
Η γνώση και των δύο συστημάτων είναι απαραίτητη για πραγματική εργασία Node: Το ESM είναι το μέλλον (πρότυπο, tree-shakeable, top-level await, ευθυγραμμισμένο με τον browser) και η σωστή επιλογή για νέα έργα, αλλά μεγάλο μέρος του οικοσυστήματος npm και ο υπάρχων κώδικας είναι CommonJS.
Η κατανόηση των διαφορών σύνταξης, του τρόπου ενεργοποίησης του ESM ("type": "module"), και των περιορισμών διαλειτουργικότητας (ειδικά ότι το CJS δεν μπορεί να απαιτεί ESM) αποτρέπει τη συνήθη σύγχυση και τα σφάλματα που προκύπτουν όταν τα ανακατεύουν.
Μια βιβλιοθήκη ερωτήσεων συνέντευξης IT με αναλυτικές απαντήσεις — από Junior έως Senior.
Δωρεά