NodeJS requiere todos los módulos en un archivo, ¿buenas prácticas?

Me pregunto si hay algún inconveniente, desde el punto de vista del diseño o la seguridad, tener un archivo que requires() todos los módulos que necesito y luego los exporte. Esto me salvaría de hacer un seguimiento de todos los módulos en cada archivo.

Ejemplo:

 // my_requires.js const bodyParser = require('body-parser') const parseForm = bodyParser.urlencoded({extended: false}) const DOMPurify = require('dompurify'); const {JSDOM} = require('jsdom'); const jwt = require('jsonwebtoken'); const passport = require('passport'); require('../config/passport')(passport) module.exports = { bodyParser: bodyParser, parseForm: parseForm, jwt: jwt, passport: passport, bcrypt: bcrypt } 

y luego en cualquier archivo donde los necesite, solo necesito

 const reqs = require('my_requires.js') 

No pude averiguar si hay algún inconveniente en el uso de una construcción como esta. Dado que todos los módulos están cargados en el espacio global, no veo ningún inconveniente en mi enfoque.

Para un buen diseño modular que haga que los módulos sean más fáciles de reutilizar en otros proyectos, un módulo debe incluir SOLO las cosas que necesita o que absolutamente tiene que compartir con otros.

No debería requerir en cosas para algún otro módulo solo guardar algunas letras de escribir en otro lugar. Simplemente no hay razón para hacer eso. El sistema almacena en caché los módulos, por lo que usar un require() en un módulo donde se necesita en lugar de obtener una exportación de algún otro archivo hace que el módulo sea más independiente, más independiente y reduzca las dependencias innecesarias.

Por lo tanto, si require() todo en un lugar y luego lo exporta, simplemente crea un proyecto interdependiente gigantesco donde nada es independiente de cualquier otra cosa. Ningún módulo individual puede reutilizarse solo en algún otro proyecto porque todo depende del archivo de la aplicación central que es específico de la aplicación. Y, ¿qué ganaste realmente al deshacerte de la independencia del módulo? Probablemente solo haya guardado algunas líneas de escritura, eso es todo.

Es un tanto contradictorio cuando se llega a la velocidad en node.js desde otros entornos de progtwigción que no implementan la modularidad como lo hace node.js, pero cada módulo debe comenzar con una lista de declaraciones require() para las bibliotecas externas de las que depende. en. Sí, parte de ese código se duplicará en otros módulos, pero no lo considero como una duplicación innecesaria, sino más bien como una statement organizada de dependencias en aras de la claridad y la modularidad. Esto es de lo que depende este módulo. Esto es lo que se debe instalar para reutilizar este módulo. Aquí se explica cómo utilizar este módulo independientemente del rest de la aplicación.

No pude averiguar si hay algún inconveniente en el uso de una construcción como esta. Dado que todos los módulos están cargados en el espacio global, no veo ningún inconveniente en mi enfoque.

Nada es blanco y negro. A veces hay razones para compartir un grupo de cosas. Pero, enumero estas desventajas de tu método y generalmente evitaría la técnica:

  1. Reduce la independencia del módulo y la reutilización del módulo.
  2. Hace que las dependencias del módulo sean menos obvias cuando se mira el código.
  3. Hace que los módulos sean más difíciles de probar de forma independiente.
  4. Crea interdependencias innecesarias entre archivos que no necesitan depender entre sí para cargar las cosas que desean usar.

Ocasionalmente, hay casos en los que encuentra que hay un conjunto común de módulos que muchos de sus módulos necesitan al mismo tiempo. En ese caso, no los exporte desde la aplicación a todo. En su lugar, cree un nuevo módulo que se pueda compartir que importe esos otros módulos y los exporte. Luego, mantuvo sus módulos centrales independientes y creó un nuevo módulo reutilizable que le brinda un grupo de módulos que comúnmente usan juntos. De esta manera, resuelve el mismo problema al boost la modularidad y la reutilización en lugar de reducirlo (y también puede ahorrar algo de escritura).

Estas son las cosas típicas que hago en el archivo del servidor. Pero, la mayoría de ellos se usan solo una o dos veces en mi código, y generalmente en el archivo del servidor. Por lo tanto, solo si se usan en muchos lugares podría tener sentido ponerlo en un archivo por separado. Otro caso creo que es código duplicado.