Misturando 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
app.mjs
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.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo