npm управление вложенными зависимостями - PullRequest
6 голосов
/ 13 марта 2012

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

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

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

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

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

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

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

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

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 08 декабря 2014

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

nodeenv / lib / node_modules / express / ... 
                             /
                             / connect-mongodb / ...
                             /
                             / connect / ...
0 голосов
/ 07 мая 2012

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

Это не ошибка NPM или недостаток в его конструкции.Вам нужно будет решить проблему логики самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...