2012-03-13 3 views
6

У меня вопрос о лучших практиках управления npm-зависимыми зависимостями.npm управление вложенными зависимостями

Позвольте мне объяснить мою ситуацию, и, пожалуйста, сообщите мне, что я делаю неправильно, или как лучше всего подойти к этому.

Я запускаю приложение, используя express.js и express-mongostore в nodeenv. Из-за nodeenv, я делаю npm-ing во всем мире, поэтому все они попадают в папку nenv/lib/node_modules. Дело в том, что я пытаюсь развить кровоточащий край express.js, в то время как express-mongostore не обновляется через некоторое время. После установки обоих модулей я получаю эту структуру папок.

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

Итак, что происходит, так это то, что у меня есть 2 разных варианта подключения.

Я сгорел из-за того, что cookie, сгенерированный хранилищем mongodb, и тот, который генерируется промежуточным программным обеспечением сеанса, отличается тем, что он указывает на реализацию двух различных приложений-подключений (один вызывает хранилище, которое вызывает utils и другие вызовы utils напрямую. , они указывают на разные файлы во время требуемого разрешения). Фактическая разница здесь в том, что они подписывают cookie с использованием разных алгоритмов. Некоторое время мои сеансы были недействительными для каждой загрузки страницы, и мне потребовалось много времени, чтобы отладить до этого уровня.

Я читал на Интернетах, и кажется, что это должно быть путь нпм и хорошая вещь. Проблема здесь в том, что, поскольку экспресс полагается на кучу utils в connect и connect-mongodb, наследует некоторые из тех же классов в connect, поскольку они являются разными репозиториями, является проблематичным.

У меня в настоящее время еще есть 2 версии подключения, и я заплатил один, чтобы быть похожим на другой. Очевидно, что это не устойчивое решение. Как я должен продолжать и подходить к управлению зависимостями в этом случае?

Заранее благодарен!

ответ

3

Вы можете запустить npm dedupe для перемещения совместимых зависимостей до дерева. Итак, предполагая, что express и connect-mongodb могут работать с той же версией подключения, вы получите такое дерево:

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

Вы испытываете фундаментальную несовместимость между двумя модулями, которые предполагают, что могут взаимодействовать друг с другом.

Это не ошибка НПМ или дефектов в его дизайне. Вам нужно будет решить логическую проблему самостоятельно.