Node.js y estructura del proyecto

Estoy trabajando en un nuevo proyecto con Node.js, Express, Socket.io y el module MySQL y siendo un principiante con esas tecnologías, tengo algunas preguntas sobre la estructuración del proyecto y las buenas prácticas.

En este momento, mi código está estructurado de la siguiente manera:

├── node_modules ├── package.json ├── server.js ├── server.socket.live.js # Socket.io namespace ├── server.database.js # For database configuration and connection pool ├── server.database.resources.js # Model for the 'resources' table ├── server.route.live.js └── ... 

Para el estado actual del proyecto, funciona bastante bien, pero el código crece rápidamente y un único directory hará que el código sea difícil de navegar y mantener.

Así que he estado tratando de encontrar una manera de estructurar mi código con las siguientes reglas:

  • Necesito files globales que pueda include de todas partes (por ejemplo, la database y los models).
  • Las routes y otros subcomponentes deben ser (y son) independientes entre sí.
  • Nodo debe poder caching correctamente cada file, por lo que las diferentes routes ('./database.js' y '../database.js') están fuera de la cuestión.
  • Si es posible, evite requiere de los directorys principales.

Con eso en mente, se me ocurrió esta solución:

 ├── package.json ├── node_modules | └── ... ├── server.js ├── server | ├── node_modules | | ├── database | | | ├── package.json | | | ├── database.js | | | ├── resources.js | | | └── ... | ├── socket | | ├── live.js # With live subfolder if file grows too big | | └── ... | ├── routes | | ├── live.js # With live subfolder if too many sub-routes | | └── ... 

En teoría, funciona muy bien: con una estructura como esta podría agregar fácilmente nuevos modules "globales" en server / node_modules, y nuevas routes o espacios de nombres de socket, siempre que sean independientes entre sí.

Entonces mi pregunta: ¿funcionaría eso en la práctica, o hay una mejor manera de hacerlo? ¿Will Node podrá requerir los files en server / node_modules con buen caching? ¿Cómo incluyo la subcarpeta server / node_modules en mi repository git (mientras sigo ignorando los root node_modules)?

¡Con muchas GRACIAS!