Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Qual a diferença entre exportar uma classe, função e uma constante/variável

class MinhaClasse { // Codigo aqui .. }

module.exports = MinhaClasse

module.exports = () => { // Codigo aqui ... }

const modulo = require('modulo')

module.exports = modulo

2 respostas
solução!

Oi Jailson, tudo bom?

Quando exportamos algo com o module.exports estamos possibilitando que outras partes da nossa aplicação usem uma api do modulo que definimos.

Se exportarmos uma classe damos a possibilidade de outros módulos instanciarem essa classe e estenderem ela. Isso é diferente de exportarmos uma instância da classe, nesse segundo caso sempre que alguém chamar o require vai receber a mesma instância e não uma nova ( basicamente um singleton pattern, que não é muito interessante de ser criado )

Já quando exportamos uma função damos a possibilidade de outros módulos utilizarem aquela função o que facilita a reutilização de código. Por exemplo se queremos validar um CPF eu posso ter um módulo que recebe um CPF como parâmetro e devolve true/false se ele é verdadeiro ou falso. Dessa forma só preciso importar o modulo de validação e utilizar ele.

O mesmo vale para as Variáveis e constantes, ao exportarmos elas, todos outros módulos do sistema tem acesso ao conteúdo delas e podem usar em alguma tarefa delas. Esse é o caso mais raro e o melhor é sempre exportarmos constates, pq se algum modulo usa uma variável para definir seu estado interno e ou terceiro modulo vai la e altera essa variável o sistema pode ter comportamentos indefinidos e super difíceis de debugar

Vlw ricardo, muito obrigado cara.