O que é CommonJS e ES Modules no Node.js?
O Node.js suporta dois sistemas de módulos diferentes: CommonJS (CJS) e ES Modules (ESM). Ambos permitem dividir o código em partes reutilizáveis, mas funcionam de maneiras distintas.
O que é CommonJS?
O CommonJS foi o primeiro sistema de módulos adotado pelo Node.js. Ele utiliza require
para importar módulos e module.exports
para exportar.
Exemplo de exportação com CommonJS (module.exports
):
// calculadora.js
function somar(a, b) {
return a + b;
}
module.exports = { somar };
Exemplo de importação com CommonJS (require
):
// app.js
const calculadora = require('./calculadora');
console.log(calculadora.somar(2, 3));
O CommonJS carrega os módulos de forma síncrona, o que pode afetar a performance em certas situações.
O que são ES Modules?
Os ES Modules (ESM) são o padrão oficial do JavaScript para módulos. Eles utilizam import
e export
e são assíncronos, melhorando a performance em grandes aplicações.
Exemplo de exportação com ES Modules (export
):
// math.js
export function multiplicar(a, b) {
return a * b;
}
Exemplo de importação com ES Modules (import
):
// app.js
import { multiplicar } from './math.js';
console.log(multiplicar(4, 2));
Para usar ES Modules no Node.js, é necessário adicionar "type": "module"
no package.json
ou usar a extensão .mjs
nos arquivos.
Principais diferenças entre CommonJS e ES Modules
Característica | CommonJS (CJS) | ES Modules (ESM) |
---|---|---|
Sintaxe de importação | require |
import |
Sintaxe de exportação | module.exports |
export |
Tipo de carregamento | Síncrono | Assíncrono |
Suporte no Node.js | Padrão | Requer "type": "module" no package.json |
Quando usar CommonJS ou ES Modules?
- Use CommonJS (
require
) se estiver lidando com pacotes npm antigos ou código legado. - Use ES Modules (
import/export
) se estiver iniciando um novo projeto e deseja seguir os padrões modernos do JavaScript.
Conclusão
O CommonJS ainda é amplamente utilizado no Node.js, mas os ES Modules são o futuro da linguagem. Se estiver criando um novo projeto, prefira ES Modules para melhor compatibilidade com o JavaScript moderno.
Por que os ES Modules estão se tornando o novo padrão do Node.js?
Durante anos, o Node.js utilizou o CommonJS como padrão para modularização. No entanto, à medida que o JavaScript evoluiu, os ES Modules se tornaram o modelo oficial da linguagem.
Muitos frameworks modernos, como Next.js e NestJS, já adotaram os ES Modules como padrão, promovendo melhor compatibilidade com navegadores e melhores práticas de desenvolvimento.
A transição entre CommonJS e ES Modules pode parecer complicada, mas entender as diferenças entre eles permite escrever código mais eficiente e compatível com os padrões modernos do JavaScript.
Algumas aplicações:
- Criação de módulos reutilizáveis
- Compatibilidade com JavaScript moderno
- Melhoria na organização de código
- Integração com frameworks modernos
- Melhor performance em grandes aplicações
Dicas para quem está começando
- Se estiver iniciando um projeto novo, prefira usar ES Modules.
- Adicione
"type": "module"
nopackage.json
para habilitar ES Modules. - Evite misturar
require
eimport
no mesmo projeto. - Verifique a documentação dos pacotes npm para saber se suportam ES Modules.
- Use
import()
dinâmico para carregar módulos apenas quando necessário.
Contribuições de Henrique Almeida