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.

Como funciona o module.exports no Node.js?

O module.exports é uma funcionalidade essencial do Node.js para criar e reutilizar módulos. Ele permite exportar funções, objetos e classes para que possam ser importados em outros arquivos.

Como usar module.exports?

O module.exports pode ser usado para exportar diferentes tipos de valores. Veja alguns exemplos:

Exportando uma função

// calculadora.js
function somar(a, b) {
    return a + b;
}

module.exports = somar;

Importando e utilizando o módulo

// app.js
const somar = require('./calculadora');
console.log(somar(5, 3)); // Saída: 8

Exportando múltiplas funções

Também podemos exportar várias funções dentro de um objeto:

// calculadora.js
function somar(a, b) {
    return a + b;
}

function subtrair(a, b) {
    return a - b;
}

module.exports = { somar, subtrair };

E importamos assim:

const calculadora = require('./calculadora');
console.log(calculadora.somar(4, 2)); // Saída: 6
console.log(calculadora.subtrair(4, 2)); // Saída: 2

Exportando uma classe

Também podemos exportar classes usando module.exports:

// Pessoa.js
class Pessoa {
    constructor(nome) {
        this.nome = nome;
    }

    falar() {
        console.log(`Meu nome é ${this.nome}`);
    }
}

module.exports = Pessoa;

E importamos a classe assim:

// app.js
const Pessoa = require('./Pessoa');
const usuario = new Pessoa('Carlos');
usuario.falar(); // Saída: Meu nome é Carlos

Qual a diferença entre module.exports e exports?

O module.exports e o exports são usados para exportar módulos, mas funcionam de forma diferente:

  • module.exports é a referência principal para exportação de módulos.
  • exports é um atalho para module.exports, mas se for reatribuído diretamente, perderá sua conexão com module.exports.

Exemplo de problema ao reatribuir exports:

exports = { nome: 'Carlos' };

Aqui, exports foi reatribuído, mas module.exports ainda aponta para outro objeto, causando um erro ao importar.

Para evitar problemas, use sempre module.exports quando precisar exportar um valor único.

Conclusão

O module.exports é a maneira padrão de exportar módulos no Node.js. Ele permite compartilhar funções, classes e objetos entre arquivos, tornando o código mais modular e reutilizável. Para evitar problemas, prefira module.exports ao invés de modificar diretamente exports.

O conceito de módulos no Node.js surgiu para resolver um dos maiores desafios do desenvolvimento de software: a organização do código. Antes da modularização, grandes projetos continham arquivos enormes, difíceis de manter e entender.

Com a introdução do module.exports, tornou-se possível dividir funcionalidades em arquivos menores, melhorando a legibilidade e a manutenção do código. Hoje, essa prática é essencial para qualquer desenvolvedor que trabalhe com Node.js, permitindo que bibliotecas, APIs e aplicações sejam construídas de forma escalável e organizada.

Mesmo com a chegada dos ES Modules (import/export), o module.exports continua sendo amplamente utilizado, especialmente em pacotes npm e projetos que precisam de compatibilidade com versões anteriores do Node.js.

Algumas aplicações:

  • Criação de bibliotecas reutilizáveis
  • Facilidade na organização do código
  • Reutilização de funções e classes em múltiplos arquivos
  • Desenvolvimento de APIs modulares
  • Estruturação de projetos escaláveis

Dicas para quem está começando

  • Use module.exports para exportar valores únicos, como funções ou classes.
  • Para exportar múltiplas funções, utilize um objeto dentro do module.exports.
  • Evite reatribuir exports diretamente para não quebrar sua conexão com module.exports.
  • Ao importar módulos, utilize require('./nome-do-arquivo') sem a extensão .js.
  • Explore os módulos nativos do Node.js para entender melhor como module.exports funciona internamente.

Contribuições de Lucas Fernandes

Compartilhe este tutorial: Como funciona o module.exports no Node.js?

Compartilhe este tutorial

Continue aprendendo:

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.

Tutorial anterior

Como fazer o Node.js reconhecer imports ES6 sem usar require?

O Node.js permite usar imports ES6 em vez de require ativando ES Modules no package.json ou utilizando a extensão .mjs.

Próximo tutorial