Compartir código entre aplicaciones Node

Nuestra aplicación consta de dos componentes: la API y el cliente. Ambas son aplicaciones de nodo independientes. Si bien la API no tiene ningún componente de interfaz además de los documentos, ambos siguen compartiendo algunos archivos comunes, como componentes de Jade, CSS normalizado, módulos de utilidad y, lo más importante, definiciones de esquemas y modelos de Mongoose para la interacción de MongoDB. Realmente no quiero acostumbrarme a un flujo de trabajo donde primero hago cambios a la API, y luego copio los archivos modificados al cliente o viceversa, por lo que sería genial encontrar una solución viable para esto.

¿Cuál sería la mejor manera de compartir código misceláneo en las aplicaciones de Node?

Mientras navego por la web, he encontrado un par de soluciones, pero ninguna de ellas funciona realmente en este caso.

Una solución es hacer un módulo de nodo a partir de los archivos comunes y mantenerlo sincronizado entre las aplicaciones con NPM, pero eso significaría que yo (y los posibles desarrolladores futuros) debo saber qué archivos forman parte del módulo común, y los requieren. conrequire('node_modules/mongo/schemas/example.js') en lugar derequire('mongo/schemas/example.js') por ejemplo. Dado que hipotéticamente podría haber cientos de archivos comunes, sería imposible recordar si un archivo es común o no, especialmente para los nuevos desarrolladores.

Otra solución es hacer un submódulo git del módulo común. Esto sería perfecto, si solo pudiera incluir la ruta de submódulo a las rutas requeridas de Node, por lo que en caso de que no encuentre el archivo requerido en la ubicación esperada (por ejemplo,mongo/schemas/example.js), se vería en el submódulo común (common/mongo/schemas/example.js). Esto sería increíble, ya que permitiría sobrescribir un archivo común con una versión "local". Es como funciona Magento. El problema aquí es que Node no permite editar las rutas requeridas (al menos, supuestamente, era posible antes de Node 0.5), por lo que es un rollo.

La tercera solución es fusionar brutalmente los contenidos del repositorio común en la raíz de la aplicación. No hay problemas realmente insuperables en esta solución, pero siento que es una mala práctica. Después de todo, sería imposible editar los archivos comunes a través de la aplicación, ya que no hay manera de insertar selectivamente los archivos comunes en el repositorio de git común. Básicamente, esta solución solo haría que el flujo de trabajo sea aún más tedioso: todas las modificaciones a los archivos comunes deberían copiarse a mano en el código base común, enviarse al control remoto de git y luego copiarse a la otra aplicación. Así que esta solución definitivamente tampoco me lo corta.

Parece que la segunda solución es la única (y mejor) opción que tengo, a menos que ustedes encuentren una mejor (que realmente espero: D). Si alguien sabe una manera de cambiar las rutas de los nodos requeridos, estaría extremadamente agradecido.

Respuestas a la pregunta(3)

Su respuesta a la pregunta