Usando NODE_PATH con submodules de Git

Hice esta pregunta sobre el uso compartido de código entre las aplicaciones de nodo ayer sin respuestas, por lo que ahora tengo una pregunta más específica en lugar de larga.

¿Se considera una mala práctica agregar routes requeridas a NODE_PATH?

Como mencioné en mi pregunta anterior, estoy luchando por encontrar una forma de compartir activos comunes entre dos aplicaciones de nodos, y la única solución sensata que pude encontrar es el uso de submodules de git. Colocaría este submodule, que contiene elementos comunes como los esquemas de Mongoose, en la raíz de ambas aplicaciones, actualizaré los files cuando sea necesario y luego lo empujaré hacia la otra aplicación. Es un process muy simple sin problemas graves de fusión con los files propios de las aplicaciones como en la tercera solución en la que pensé en mi pregunta original.

La belleza de esta estructura sería que podría requerir esos activos comunes con solo folder/file.js lugar de submodule/folder/file.js agregando la ruta del submodule a las routes requeridas de Node. Esto también significaría que podría sobreescribir los files comunes del submodule con los respectivos files de la aplicación (si existían) al ubicar la ruta del submodule aún más en la stack de ruta, de modo que si se encuentra un file local, el nodo requeriría que en lugar del el equivalente del submodule.

Pero hay un pequeño problema. La documentation de Node tiene la siguiente statement sobre agregar routes requeridas a NODE_PATH:

Le recomendamos encarecidamente que coloque sus dependencies localmente en las carpetas node_modules. Se cargarán más rápido y de manera más confiable.

Básicamente, esto significa que se considera una mala práctica y ralentiza la aplicación, lo que realmente no quiero. ¿O esto solo se aplica a routes globales, por lo que el submodule (que está en la raíz de la aplicación) no sería un problema?

No recomendaría agregar routes a NODE_PATH .

En su package.json puede vincular modules directamente a la url de repositorys:

 "dependencies": { "myModels": "git+https://user:pass@github.com/myAccount/my-models.git#v0.6" "myTemplates": "git+ssh://github.com/myAccount/my-templates.git#v0.2" } 

Como puede ver, puede hacer reference a tags, twigs o lo que quiera. Puede usar diferentes versiones para cada aplicación. Simplemente actualice su installation de label, twig y npm install .

En mi humilde opinión, no usaría los submodules de Git. Podrías ensuciar las cosas bastante mal. Puede (accidentalmente) empujar el module externo con una reference al submodule antes de empujar el submodule y nadie más podría trabajar, ya que no tendrá esas confirmaciones que solo están en su máquina). Además, los submodules siempre se revisan en el modo HEAD desconectado y hay algunos problemas adicionales relacionados con la bifurcación y la fusión .

Si mi argumento no es lo suficientemente bueno como para no utilizar submodules y sigue adelante, en lugar de actualizar NODE_PATH puede agregar un file proxy a sus node_modules para evitar routes relativas:

En node_modules / models.js :

 module.exports = require('../lib/models'); 

Puede que esta no sea la mejor opción, pero evitará las routes relativas para ese module en toda la aplicación.

Si tiene node_modules en .gitignore , tendrá que omitir este file:

 node_modules/* !node_modules/models.js 

Y es posible que desee agregarlo a bundledDendencies en package.json . Sí, es un poco desorderado, pero evitará paths relativos y podrá mover carpetas con cosas complicadas (demasiado).

Para resumir : agregar las dependencies de su negocio a package.json podría ser lo que está buscando.

Así que, básicamente, esto significa que se considera una mala práctica y ralentiza la aplicación

Sí, se considera una mala práctica. A veces es útil, pero será mejor que tengas una buena razón para ello.

No, no ralentizará la aplicación.