2012-03-13 27 views
6

Tengo una pregunta sobre las mejores prácticas en la administración de dependencias anidadas npm.npm gestión de dependencias anidadas

Déjenme explicar mi situación, y por favor díganme qué estoy haciendo mal, o cuál es la mejor manera de abordar esto.

Estoy ejecutando una aplicación usando express.js y express-mongostore en un nodeenv. Debido a nodeenv, estoy npm-ing todo de manera global, por lo que todos van bajo la carpeta nenv/lib/node_modules. La cuestión es que estoy tratando de desarrollar el sangrado edge express.js, mientras que express-mongostore no se ha actualizado desde hace tiempo. Después de instalar ambos módulos, obtengo esta estructura de carpetas.

nodeenv/lib/node_modules/express/node_modules/connect/.. 
          /
          /connect-mongodb/node_modules/ connect/... 

Así que lo que termina sucediendo es que tengo 2 versiones diferentes de conexión.

Me quemé porque la cookie generada por la tienda de mongodb y la generada por el middleware de sesión es diferente porque apuntan a 2 implementaciones de conexión de utilidades diferentes (una llama a la tienda que llama utils y la otra llama a utils directamente. , apuntan a diferentes archivos durante la resolución requerida). La diferencia real aquí es que firman la cookie usando diferentes algoritmos. Por un tiempo, mis sesiones se invalidaron a cada carga de página y me tomó un buen tiempo depurarme hasta este nivel.

Estaba leyendo en Internets y parece que se supone que es el modo npm y algo bueno. El problema aquí es que dado que el sistema exprés se basa en un grupo de utilidades en connect y connect-mongodb hereda algunas de las mismas clases en connect, tenerlas como diferentes repos es problemático.

Actualmente todavía tengo 2 versiones de connect y he parchado una para que sea como la otra. Es obvio que esta no es una solución sostenible. ¿Cómo debo proceder y abordar la gestión de dependencias en este caso?

¡Gracias de antemano!

Respuesta

3

Puede ejecutar npm dedupe para mover dependencias compatibles por el árbol. Entonces, asumiendo que express y connect-mongodb pueden funcionar con la misma versión de connect, terminarás con un árbol como este:

nodeenv/lib/node_modules/express/... 
          /
          /connect-mongodb/... 
          /
          /connect/... 
-3

Estás experimentando una incompatibilidad fundamental entre dos módulos que suponen que pueden cooperar entre sí.

Esto no es culpa de NPM o falla en su diseño. Tendrá que resolver el problema de la lógica usted mismo.

Cuestiones relacionadas