我对管理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 / ...
所以最终发生的事情是我有2个不同版本的连接。
我被烧了,因为mongodb商店生成的cookie和会话中间件生成的cookie是不同的,因为它们指向2个不同的connect utils实现(一个调用调用utils的存储,另一个调用utils直接调用util。不幸的是,它们在需要解析期间指向不同的文件。这里的实际差异是他们使用不同的算法签署cookie。有一段时间,我的会话使每个页面加载失效,我花了很长时间调试到这个级别。
我正在阅读互联网,看起来这应该是npm方式而且是好事。这里的问题是,由于express在连接中依赖于一堆util,而connect-mongodb在connect中继承了一些相同的类,因此将它们设置为不同的repos是有问题的。
我目前仍然有两个版本的连接,我修补了一个像另一个。很明显,这不是一个可持续的解决方案。在这种情况下,我应该如何进行并处理依赖关系管理?
提前致谢!
答案 0 :(得分:3)
您可以运行npm dedupe
以在树上移动兼容的依赖项。因此,假设express和connect-mongodb可以使用相同版本的connect,那么你最终会得到这样一棵树:
nodeenv / lib / node_modules / express / ...
/
/ connect-mongodb / ...
/
/ connect / ...
答案 1 :(得分:-3)
您遇到两个模块之间的基本不兼容性,这些模块假设它们可以相互合作。
这不是NPM的错误或其设计中的缺陷。您需要自己解决逻辑问题。