Los módulos en Node.js son un conjunto de funciones que están encapsuladas en un archivo o directorio para ser utilizadas en otros lugares del programa. Funcionan como bloques de construcción de aplicaciones Node.js y su uso simplifica la organización y estructura del código al permitir separarlo en diferentes archivos y directorios.
Cada módulo en Node.js tiene su propio contexto, lo que significa que no interfiere con el espacio de nombres en otros archivos o módulos.
Node.js incluye varios módulos integrados que permiten realizar tareas como la manipulación de archivos, la gestión de conexiones de red, o la implementación de servidores web. También es posible crear módulos personalizados para ser reutilizados en otras partes del código o incluso entre diferentes proyectos.
Los módulos se utilizan mediante la instrucción `require()`. Cuando se requiere un módulo, Node.js hace lo siguiente:
1. Resuelve la ruta del archivo del módulo.
2. Carga el contenido del archivo en la memoria.
3. Ejecuta el código en un nuevo ámbito.
4. Asigna lo que se exporta al objeto `exports`.
Por ejemplo, si tienes un módulo llamado “calculadora” con dos funciones para sumar y restar, podrías utilizarlo de la siguiente manera:
```javascript
// En el archivo calculadora.js
exports.sumar = function(num1, num2) {
return num1 + num2;
}
exports.restar = function(num1, num2) {
return num1 – num2;
}
// En otro archivo
var calculadora = require(‘./calculadora’);
var resultadoSuma = calculadora.sumar(5, 3);
console.log(resultadoSuma); // 8
var resultadoResta = calculadora.restar(5, 3);
console.log(resultadoResta); // 2
```
Ten en cuenta que al usar `require()`, debes proporcionar la ruta al archivo de módulo. Si el módulo está en el mismo directorio que el archivo actual, puedes preceder el nombre del archivo con `./`. Para módulos que están en subdirectorios, utilizas la estructura de directorio relativa, como en `require(‘./subdirectorio/modulo’)`. Si estás requiriendo un módulo integrado de Node.js o un módulo instalado a través de npm, puedes simplemente usar el nombre del módulo, como en `require(‘http’)` o `require(‘express’)`.