O que é CommonJS e ES Modules no Node.js?

CommonJS e ES Modules são os dois principais sistemas de módulos do Node.js. CommonJS usa require/module.exports, enquanto ES Modules usa import/export.

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.

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" no package.json para habilitar ES Modules.
  • Evite misturar require e import 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

Compartilhe este tutorial: O que é CommonJS e ES Modules no Node.js?

Compartilhe este tutorial

Continue aprendendo:

Como usar módulos internos do Node.js, como fs e path?

Os módulos internos do Node.js, como fs e path, permitem manipular arquivos, diretórios e caminhos de maneira eficiente sem precisar de pacotes externos.

Tutorial anterior

Como funciona o module.exports no Node.js?

O module.exports no Node.js permite exportar funções, objetos e classes para serem reutilizados em outros arquivos do projeto.

Próximo tutorial