Módulos privados de la aplicación Node.js. ¿Dónde ponerlos?


8

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 linkfuncionaría al implementar. Crea un enlace simbólico, que no se sigue al confirmar código a través de Git o SVN. Si corro npm installen 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?

Respuestas:


6

Uso npm link. Le permite tener un módulo donde desee, y luego puede "vincularlo" en su proyecto (se creará un enlace simbólico en su nodo_módulos / carpeta), por lo que puede usarlo con require('mod1'). Su módulo tiene que ser compatible con npm.

Más información aquí: https://docs.npmjs.com/cli/link

Acerca de sus inquietudes privadas, npm pensó en esto y ofrece la privateopción. Consulte aquí: https://docs.npmjs.com/misc/registry (Vaya a: "No quiero que mi paquete se publique en el registro oficial. Es privado").

Para cada dependencia del módulo, simplemente puede definirlos en el paquete.json.


Gracias Florian, cuando confirmo los cambios a través de svn o git, no me siguen los enlaces simbólicos. ¿Significa que tendría que usar npm linktambién en el entorno de producción? ¿O está implícito en npm installalguna forma de especificarlo en package.json?
jaime

@jaime git y svn siguen enlaces simbólicos.
Florian Margaine

Sin embargo, en entornos de producción, ejecutaría un script para empaquetar los módulos en la carpeta node_modules /.
Florian Margaine

@jaime Solo necesitas usar npm linkcuando desarrolles.
Daniel

docs.npmjs.com/… - 404's. Pero realmente la mejor manera de mantener las cosas privadas es no ponerlas en Internet. Parece que el enlace también es la mejor opción ... excepto npmjs.org/doc/link.html 404 también. Me encanta amarrar la podredumbre.
Pat
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.