【问题标题】:npm nested dependency managementnpm 嵌套依赖管理
【发布时间】: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,我将其中一个修补为与另一个相同。很明显,这不是一个可持续的解决方案。在这种情况下,我应该如何进行依赖管理?

提前致谢!

【问题讨论】:

    标签: node.js express npm


    【解决方案1】:

    您正在经历两个模块之间的根本不兼容,假设它们可以相互协作。

    这不是 NPM 的错,也不是它的设计缺陷。您需要自己解决逻辑问题。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-07-02
        • 2015-12-08
        • 1970-01-01
        • 1970-01-01
        • 2015-07-07
        • 2015-04-06
        • 2013-03-26
        相关资源
        最近更新 更多