El enfoque predeterminado que a menudo veo es:

// repeat this in all files
var express  = require('express');
var mongoose = require('mongoose');
var async    = require('async');
...

Pero en mis aplicaciones NodeJS estoy haciendo esto:

// include this only on the server file
_express  = require('express');
_mongoose = require('mongoose');
_async    = require('async');
...

Prefiero usar el prefijo _ para identificar libs / módulos y no uso var porque no quiero repetir el requisito / configuración de todos los paquetes en cada archivo de mi aplicación.

De esta manera, puedo require() módulos solo una vez en el archivo server.js y usarlo en cualquier lugar.

¿Es una mala idea?

2
user3175226 30 ago. 2014 a las 00:03

2 respuestas

La mejor respuesta

Los módulos se almacenan en caché en nodejs. Es una buena práctica exigir donde sea necesario.

De los documentos de node.js:

Los módulos se almacenan en caché después de la primera vez que se cargan. Esto significa (entre otras cosas) que cada llamada a requerir ('foo') obtendrá exactamente el mismo objeto devuelto, si se resuelve en el mismo archivo.

Las llamadas múltiples que se requieren ('foo') pueden no provocar que el código del módulo se ejecute varias veces. Esta es una característica importante. Con él, se pueden devolver objetos "parcialmente hechos", lo que permite cargar dependencias transitivas incluso cuando causen ciclos.

http://nodejs.org/api/modules.html

5
Jordonias 29 ago. 2014 a las 20:05

En su desarrollo front-end (en caso de que no sea solo una pregunta de nodo del lado del servidor), seguramente podría hacer sus requisitos en una base o js principal y dejarlos referenciados globalmente agregándolos a la ventana, el documento o cualquier otro los objetos con alcance, pero la mejor práctica sería requerir y cargar módulos solo cuando sean necesarios.

1
Munhoz 29 ago. 2014 a las 20:10