如果我需要一个已经安装为另一个模块的子依赖项的npm模块,我应该仍然使用npm安装它吗?
例如,kue需要redis,所以red is与kue一起安装,例如npm install kue。
/node_modules/kue/node_modules/redis我是否应该同样安装redis,因此npm安装redis?
/node_modules/redis/或者有没有一种方法可以在我的require语句中添加对从kue安装的redis的引用?
require("/node_modules/kue/node_modules/redis")而不是
require ("redis")还是有更好的方法?
发布于 2011-12-20 09:13:37
这是一个普遍的经验法则:
如果您在应用程序的源代码中使用require('module-name'),则应该将module-name列为依赖项。将依赖项的依赖项视为不透明的实现细节,不要关心它们。
这允许kue依赖于与您的应用程序不同的redis模块版本,或者将其实现完全切换为不同的模块。所有这些都不会影响您的应用程序。
Node的模块系统不同于“传统的”模块系统(例如Ruby),因为同一模块的多个版本可以在同一进程中加载,而不会导致冲突。一开始感觉有点不对劲,但只要照做就行了,你很快就会看到好处的。我怀疑,随着社区进一步探索Node的这一方面,我们将看到一些有趣的项目出现,以利用它。
发布于 2011-12-20 08:37:33
只需在本地安装redis即可。
如果你想要一个不同版本的redis,而不是安装了kue的版本,该怎么办?当您更新kue的版本时,redis的版本突然发生了变化,该怎么办?
只要require(module)像预期的那样工作,你就不应该关心node_modules的内容。节省一些kbs的源代码是不值得这样做的。
发布于 2011-12-20 15:09:11
您不应该关心自己安装模块和依赖项,让NPM为您做这件事。
例如,只安装一个Redis并不是很好,因为Kue (或其他依赖于Redis的模块)可能需要特定的版本,而其他一些模块可能需要另一个版本。
让NPM为您做所有的工作,只需npm install package,然后在您的代码中使用require('package')。正如@Raynos所说,节省一些kbs的代码并不是一笔很大的交易,甚至可能会让你陷入麻烦。
https://stackoverflow.com/questions/8568724
复制相似问题