我有一个关于管理npm嵌套依赖的最佳实践的问题。
让我解释一下我的情况,请告诉我我做错了什么,或者解决这个问题的最好方法是什么。
我在nodeenv中使用express.js和express-mongostore运行一个应用程序。由于nodeenv,我对所有内容进行了全局npm处理,因此它们都放在nenv/lib/node_modules文件夹下。问题是,我正在尝试开发前沿的express.js,而express-mongostore已经有一段时间没有更新了。在安装了两个模块之后,我得到了这个文件夹结构。
nodeenv / lib / node_modules / express / node_modules / connect / ..
/
/ connect-mongodb / node_modules/ connect / ...所以最终发生的是,我有两个不同版本的连接。
我被烧焦了,因为mongodb存储生成的cookie和会话中间件生成的cookie不同,因为它们指向两个不同的连接utils实现(一个调用调用utils的存储,另一个直接调用utils )。不幸的是,它们在需要解析时指向不同的文件)。这里的实际区别是它们使用不同的算法对cookie进行签名。有一段时间,我的会话在每次页面加载时都会失效,我花了很长时间才调试到这个级别。
我在互联网上阅读,似乎这应该是npm的方式,也是一件好事。这里的问题是,因为express在connect和connect中依赖于一堆实用程序-mongodb在connect中继承了一些相同的类,所以让它们成为不同的repos是有问题的。
我目前仍然有两个版本的连接,我修补了一个,使之与另一个类似。很明显,这不是一个可持续的解决方案。在这种情况下,我应该如何进行和处理依赖项管理?
提前感谢!
发布于 2014-12-09 03:45:20
您可以运行npm dedupe在树中向上移动兼容的依赖项。因此,假设express和connect-mongodb可以使用相同版本的connect,您将得到如下所示的树:
nodeenv / lib / node_modules / express / ...
/
/ connect-mongodb / ...
/
/ connect / ...发布于 2012-05-07 06:12:37
你正在经历两个模块之间的根本不兼容,这两个模块假设它们可以相互协作。
这不是NPM的错,也不是它的设计缺陷。你需要自己解决逻辑问题。
https://stackoverflow.com/questions/9679730
复制相似问题