La situación sería:
Desarrollo 2 proyectos en mi entorno de desarrollo Node.js, P1 y P2.
P1 requirió el desarrollo de dos módulos simples, mod1 y mod2, que se almacenan en P1/lib
. Cada uno de estos módulos resuelve encontrar sus dependencias externas en P1/node_modules
. Las dependencias necesarias para P1 se han instalado en esta carpeta a través de npm.
Ahora imagen que queremos reutilizar mod1 en el otro proyecto P2, aquí están mis dudas surgieron. Yo podría...
Solo copia mod1 a
P2/lib
. Replicación, así que ni siquiera considero esta opción.De P2, mod1 referencia de P1:
require($PROJECTS_DIR + '/P1/lib/mod1')
. No es una buena opción, de esta manera P2 dependería de P1.Coloque mod1 en un directorio de nivel superior o use NODE_PATH, para que P1 y P2 puedan resolverlo simplemente con doint
require('mod1')
. Sin embargo, al implementar, también debería implementar este directorio de nivel superior que parece un poco sucio.Me gustaría tratar mod1 como un módulo npm, para que pueda instalarse fácilmente en cualquier proyecto o entorno. Sin embargo, en este caso particular, no puedo publicar el módulo en npm porque es demasiado específico del proyecto. Podría crear un repositorio npm privado y poner mod1 dentro. La esencia de esto sería configurarlo para poder acceder también desde el entorno de producción. ¿Vale la pena?
¿Qué hay de poner todo junto
node_modules
? (dependencias externas y mis propias bibliotecas). Eso sería genial ya que los módulos se pueden requerir solo como 'require (' module '). Pero también parece bastante sucio.No estoy seguro de cómo
npm link
funcionaría al implementar. Crea un enlace simbólico, que no se sigue al confirmar código a través de Git o SVN. Si corronpm install
en producción, ¿también instalará el módulo vinculado?
Nada de lo anterior me satisface. No sé si uno de estos es adecuado, o si ustedes tienen otras sugerencias, pero, ¿hay alguna forma preferida de estructurar sus propias bibliotecas privadas para que puedan reutilizarse fácilmente en otros proyectos?
npm link
también en el entorno de producción? ¿O está implícito ennpm install
alguna forma de especificarlo en package.json?npm link
cuando desarrolles.