2012-03-13 22 views
6

Mam pytanie dotyczące najlepszych praktyk w zarządzaniu zależnościami zagnieżdżonymi npm.Zarządzanie zależnościami zagnieżdżonymi npm

Pozwolę sobie wyjaśnić moją sytuację i proszę powiedzieć, co robię źle, lub jaki jest najlepszy sposób podejścia do tego.

Używam aplikacji używającej express.js i express-mongostore w nodeenv. Z powodu nodeenv mam globalnie wszystko, więc wszyscy przechodzą pod folder nenv/lib/node_modules. Chodzi o to, próbuję rozwinąć bleeding edge express.js, podczas gdy express-mongostore nie było od jakiegoś czasu aktualizowane. Po zainstalowaniu obu modułów otrzymuję tę strukturę folderów.

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

To, co się dzieje, to to, że mam 2 różne wersje połączenia.

Spaliłem się, ponieważ pliki cookie wygenerowane przez sklep mongodb i plik wygenerowany przez oprogramowanie pośredniczące sesji są inne, ponieważ wskazują na 2 różne implementacje connect utils (jeden nazywa się sklepem, który wywołuje utils, a inne wywołują polecenia bezpośrednio. , wskazują różne pliki podczas wymaganego rozwiązania). W rzeczywistości różnica polega na tym, że podpisują plik cookie za pomocą różnych algorytmów. Przez pewien czas moje sesje unieważniały każde ładowanie strony i zajęło mi sporo czasu debugowanie na tym poziomie.

Czytałem na Internetach i wygląda na to, że ma to być npm i dobra rzecz. Problem polega na tym, że ponieważ express polega na grupie utils w connect i connect-mongodb dziedziczy niektóre z tych samych klas w connect, posiadanie różnych repo jest problematyczne.

Obecnie nadal mam 2 wersje connect i naprawiłem jeden, aby był taki jak drugi. Jest oczywiste, że nie jest to trwałe rozwiązanie. Jak powinienem postępować i podejść do zarządzania zależnościami w tym przypadku?

Z góry dziękuję!

Odpowiedz

3

Można uruchomić npm dedupe, aby przenieść kompatybilne zależności w górę drzewa. Zakładając, że express i connect-mongodb mogą działać z tą samą wersją connect, skończysz z drzewem:

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

Występuje podstawowa niezgodność między dwoma modułami, które zakładają, że mogą współpracować ze sobą.

Nie jest to błąd NPM ani błąd w jego konstrukcji. Musisz samodzielnie rozwiązać problem logiczny.

Powiązane problemy