2012-03-13 18 views
6

Ho una domanda sulle migliori pratiche nella gestione delle dipendenze nested npm.Gestione dipendenze npm npm

Lasciami spiegare la mia situazione, e per favore dimmi cosa sto facendo male, o qual è il modo migliore per avvicinarti a questo.

Sto eseguendo un'applicazione utilizzando express.js e express-mongostore in un nodeenv. A causa di nodeenv, sto eseguendo il npm di tutto a livello globale in modo che vadano tutti nella cartella nenv/lib/node_modules. Il fatto è che sto cercando di sviluppare bleed edge express.js mentre express-mongostore non è stato aggiornato da un po '. Dopo aver installato entrambi i moduli, ottengo questa struttura di cartelle.

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

Quindi, quello che succede è che ho 2 diverse versioni di connessione.

Mi sono bruciato perché il cookie generato dal negozio mongodb e quello generato dal middleware di sessione è diverso perché indicano 2 differenti implementazioni di connect utils (uno chiama il negozio che chiama utils e le altre chiamate utilmente direttamente. , indicano diversi file durante la risoluzione richiesta). La vera differenza qui è che firmano il cookie utilizzando diversi algoritmi. Per un po ', le mie sessioni si stavano invalidando a ogni caricamento della pagina e mi ci è voluto molto tempo per eseguire il debug a questo livello.

Stavo leggendo su Internet e sembra che questo dovrebbe essere il modo NPM e una buona cosa. Il problema qui è che poiché express si basa su un gruppo di utilità in connect e connect-mongodb eredita alcune delle stesse classi in connect, trovandole essere repository diversi è problematico.

Attualmente ho ancora 2 versioni di connessione e una patch per essere uguale all'altra. È ovvio che questa non è una soluzione sostenibile. Come devo procedere e affrontare la gestione delle dipendenze in questo caso?

Grazie in anticipo!

risposta

3

È possibile eseguire npm dedupe per spostare le dipendenze compatibili nell'albero. Quindi, supponendo che express e connect-mongodb possano funzionare con la stessa versione di connect, ti ritroverai con un albero come questo:

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

Si sta verificando un'incompatibilità fondamentale tra due moduli che presuppongono che possano cooperare l'uno con l'altro.

Questo non è un difetto di NPM o difetto nel suo design. Dovrai risolvere tu stesso il problema della logica.

Problemi correlati