npm嵌套依赖管理

joh*_*cch 6 node.js npm express

我对管理npm嵌套依赖项的最佳实践有疑问.

让我解释一下我的情况,请告诉我我做错了什么,或者解决这个问题的最佳方法是什么.

我在nodeenv中使用express.js和express-mongostore运行应用程序.由于nodeenv,我正在全局搜索所有内容,因此它们都位于nenv/lib/node_modules文件夹下.问题是,我正在尝试开发出边缘express.js而express-mongostore还没有更新.安装两个模块后,我得到了这个文件夹结构.

nodeenv / lib / node_modules / express / node_modules / connect / ..
                             /
                             / connect-mongodb / node_modules/ connect / ...
Run Code Online (Sandbox Code Playgroud)

所以最终发生的事情是我有2个不同版本的连接.

我被烧了,因为mongodb商店生成的cookie和会话中间件生成的cookie是不同的,因为它们指向2个不同的connect utils实现(一个调用utils调用utils,另一个调用utils直接.不幸的是,他们指向需要解决时的不同文件).这里的实际差异是他们使用不同的算法签署cookie.有一段时间,我的会话使每个页面加载无效,我花了很长时间调试到这个级别.

我正在阅读互联网,似乎这应该是npm的方式而且是一件好事.这里的问题是,由于express依赖于连接中的一堆实用程序而且connect-mongodb在连接中继承了一些相同的类,使它们成为不同的存储库是有问题的.

我目前仍然有两个版本的连接,我修补一个像另一个.很明显,这不是一个可持续的解决方案.在这种情况下,我应该如何进行并处理依赖关系管理?

提前致谢!

Sci*_*ter 3

您可以运行npm dedupe以将兼容的依赖项移到树上。因此,假设express和connect-mongodb可以使用相同版本的connect,你最终会得到一个像这样的树:

nodeenv / lib / node_modules / express / ... 
                             /
                             / connect-mongodb / ...
                             /
                             / connect / ...
Run Code Online (Sandbox Code Playgroud)