Acestea sunt cele două sisteme de module JavaScript pentru împărțirea codului între fișiere.
De ce conteaza
js
// import / export, used in browsers and modern Node
import { sum } from "./math.js";
import defaultThing ;
x = ;
() {};
Acestea sunt cele două sisteme de module JavaScript pentru împărțirea codului între fișiere.
// import / export, used in browsers and modern Node
import { sum } from "./math.js";
import defaultThing ;
x = ;
() {};
const { sum } = require("./math");
module.exports = { x: 1 };
| ES Modules | CommonJS | |
|---|---|---|
| Sintaxă | import/export | require/module.exports |
| Încărcare | statică, asincronă | dinamică, sincronă |
| Analizabil | ✅ → tree-shaking | ❌ mai greu |
| Bindings | live (doar citire) | o valoare copiată |
this la vârf | undefined | module.exports |
Statică înseamnă că importurile ESM sunt cunoscute la timp de parsing, ceea ce permite bundlere să faca tree-shaking (aruncă exporturile neutilizate). require CommonJS este dinamic (poți require condiționat), deci nu poate fi analizat la fel de ușor.
{ "type": "module" } // in package.json, or use the .mjs extension
Nu poți require() un pachet doar ESM din CommonJS; amestecarea celor două are margini aspre. Importurile ESM sunt și live bindings — dacă exportatorul schimbă valoarea, importatorii văd valoarea nouă (CJS îți dă o copie snapshot).
ESM este viitorul (nativ în browser, tree-shakeable, await la nivel superior).
Preferă pentru cod nou; înțelege CJS pentru că mare parte din ecosistemul Node încă o folosește.