Estes são os dois sistemas de módulos do JavaScript para dividir código entre arquivos.
Por que isso importa
// import / export, used in browsers and modern Node
import { sum } from ;
defaultThing ;
x = ;
() {};
Estes são os dois sistemas de módulos do JavaScript para dividir código entre arquivos.
// import / export, used in browsers and modern Node
import { sum } from ;
defaultThing ;
x = ;
() {};
const { sum } = require("./math");
module.exports = { x: 1 };
| ES Modules | CommonJS | |
|---|---|---|
| Sintaxe | import/export | require/module.exports |
| Carregamento | estático, assíncrono | dinâmico, síncrono |
| Analisável | ✅ → tree-shaking | ❌ mais difícil |
| Bindings | live (somente leitura) | um valor copiado |
this no topo | undefined | module.exports |
Estático significa que os imports ESM são conhecidos no tempo de análise, o que permite aos bundlers fazer tree-shaking (descartar exportações não utilizadas). O require CommonJS é dinâmico (você pode require condicionalmente), portanto não pode ser analisado tão facilmente.
{ "type": "module" } // in package.json, or use the .mjs extension
Você não pode fazer require() de um pacote apenas ESM do CommonJS; misturar os dois tem desvantagens. Os imports ESM também são live bindings — se o exportador muda o valor, os importadores veem o novo valor (CJS lhe dá uma cópia de snapshot).
ESM é o futuro (nativo do navegador, tree-shakeable, await de nível superior).
Prefira para código novo; entenda CJS porque grande parte do ecossistema Node ainda o utiliza.