node.js中重叠的依赖项

时间:2011-12-19 23:01:59

标签: node.js

如果我需要一个已经安装为另一个模块的子依赖的npm模块,我还应该用npm安装吗?

例如,kue需要redis,因此红色安装了kue,例如     npm install kue

/node_modules/kue/node_modules/redis

我是否还应该安装redis,因此npm install redis

/node_modules/redis/

或者有没有办法在我的require语句中添加对kue安装的redis的引用

require("/node_modules/kue/node_modules/redis")

而不是

require ("redis")

还是有更好的方法吗?

3 个答案:

答案 0 :(得分:0)

只需在本地安装redis。

如果你想要一个与kue一起安装的redis版本,那该怎么办?如果更新kue版本时redis版本突然改变怎么办?

只要require(module)按预期工作,您就不应该关心node_modules的内容。保存几kbs的源代码是不值得的。

答案 1 :(得分:0)

这是一般的经验法则:

如果您在应用程序的源代码中require('module-name'),则应将module-name列为依赖项。将依赖关系视为不透明的实现细节,而不关心它们。

这允许kue依赖于与应用程序不同的redis模块版本,或者完全切换其对不同模块的实现。所有这些都不会影响您的申请。

节点的模块系统与“常规”模块系统(例如Ruby)不同,因为同一模块的多个版本可以在同一过程中加载而不会引起冲突。起初感觉有点偏,但只要顺其自然,你会很快看到好处。我怀疑当社区进一步探索Node的这个方面时,我们会看到一些有趣的项目出现以利用它。

答案 2 :(得分:0)

您不应该自己关心安装模块和依赖项,让NPM为您完成。

例如,只安装一次Redis并不是那么好,因为Kue(或其他依赖于Redis的模块)可能需要特定版本而某些其他模块可能需要另一个版本。

NPM为您完成所有工作,只需npm install package,然后在您的代码中require('package')。正如@Raynos所说,节省几kbs的代码并不是什么大不了的事情,甚至可能让你遇到问题。