【发布时间】:2012-03-29 14:23:51
【问题描述】:
我有一个关于管理 npm 嵌套依赖项的最佳实践的问题。
让我解释一下我的情况,请告诉我我做错了什么,或者解决这个问题的最佳方法是什么。
我正在 nodeenv 中使用 express.js 和 express-mongostore 运行应用程序。由于 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 个不同版本的连接。
我被烧毁了,因为 mongodb 存储生成的 cookie 和会话中间件生成的 cookie 不同,因为它们指向 2 个不同的连接 utils 实现(一个调用调用 utils 的存储,另一个直接调用 utils。不幸的是,它们在需要解析期间指向不同的文件)。这里的实际区别是他们使用不同的算法对 cookie 进行签名。有一段时间,我的会话在每次页面加载时都会使自己失效,我花了很长时间才调试到这个级别。
我在 Internet 上阅读,似乎这应该是 npm 方式,而且是一件好事。这里的问题是,由于 express 依赖于 connect 中的一堆 utils,而 connect-mongodb 继承了 connect 中的一些相同的类,所以让它们成为不同的 repos 是有问题的。
我目前仍有 2 个版本的 connect,我将其中一个修补为与另一个相同。很明显,这不是一个可持续的解决方案。在这种情况下,我应该如何进行依赖管理?
提前致谢!
【问题讨论】: