Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Misturando CommonJS e Módulos ES | Seção
Fundamentos de Node.js

bookMisturando CommonJS e Módulos ES

Deslize para mostrar o menu

Ao trabalhar em projetos Node.js, é possível encontrar tanto CommonJS quanto ES Modules no mesmo código-fonte. O Node.js originalmente utilizava CommonJS (require/module.exports), mas agora também oferece suporte a ES Modules (import/export). Misturar esses dois sistemas pode ser desafiador devido às diferenças de sintaxe, extensões de arquivos e comportamento de carregamento. Problemas de compatibilidade surgem porque nem todos os recursos estão disponíveis ao importar um tipo de módulo em outro. É importante compreender as estratégias para utilizar ambos os sistemas em conjunto, bem como as limitações que podem ser encontradas.

Uma estratégia comum é definir um sistema de módulos principal para o projeto e utilizar recursos de compatibilidade apenas quando necessário. Por exemplo, pode-se manter a maior parte do código em CommonJS para compatibilidade com ferramentas antigas, mas utilizar ES Modules para códigos mais recentes ou quando for necessário recursos como import.meta.url. O Node.js permite especificar o tipo de módulo no arquivo package.json usando o campo "type": "commonjs" ou "module". Arquivos com extensão .cjs são sempre tratados como CommonJS, enquanto arquivos .mjs são sempre ES Modules, independentemente do campo "type". Isso proporciona flexibilidade para misturar tipos de módulos em um projeto, mas é necessário estar atento às limitações e diferenças na forma como os módulos são carregados e executados.

math.cjs

math.cjs

app.mjs

app.mjs

copy

O exemplo de código demonstra como utilizar um módulo CommonJS dentro de um ES Module no Node.js. O arquivo math.cjs utiliza a sintaxe CommonJS, exportando uma função add com module.exports.add = (a, b) => a + b;. Essa função soma dois números e retorna o resultado.

O arquivo app.mjs é um ES Module. ES Modules não podem utilizar require diretamente, por isso é necessário importar a função createRequire do pacote interno module. Ao chamar createRequire(import.meta.url), é criada uma função require que funciona no contexto do arquivo ES Module atual. Em seguida, utiliza-se esse require para importar o módulo CommonJS (math.cjs).

Ao chamar math.add(2, 3), o código exibe 5 no console. Essa abordagem permite misturar CommonJS e ES Modules no mesmo projeto, aproveitando os pontos fortes de cada sistema conforme necessário.

question mark

Quando escolher CommonJS em vez de ES Modules em um projeto Node.js?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 17

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 1. Capítulo 17
some-alt