Nodejs使用变量赋值来加载模块

时间:2015-01-15 01:38:30

标签: javascript node.js ecmascript-5

大多数语言都使用'import'指令来加载其他模块代码,例如 java -

import a.b.c

elisp -

(load a)

python -

from a import b

但是,为什么nodejs使用变量表达式来加载其他模块函数,比如

var a = require('a')

我知道,大多数用于javascript的IDE,如tern.js-emacs,nodeclipse都无法正确执行源代码查找(对于已加载的模块),因为IDE必须运行代码(或)eval才能找到,加载的模块对象包含的属性。

1 个答案:

答案 0 :(得分:0)

你可以说JS属于一类语言,其中一切都是平等对象的想法是"哲学的一部分"这指导了它的发展。节点require是由环境提供的函数(对象),module对象也是如此。这种模式称为Common JS格式。

您实际上不必将require函数的结果分配给变量。它在实践中很少见,但是您调用的节点模块可能只是被调用以导致操作发生,例如,可能需要sugar.js来改变一些本机对象但是没有它自己提供的方法,因此分配返回值(在该模块的执行期间提供的module.exports对象)没有意义。

不将模块分配给变量的一个更常见的例子是,当使用require只是为了从模块中获取某些属性时 - 例如var x = require('module').methodOfInterest。类似地,一些模块返回一个构造函数,所以你有时可能会看到var instance = new (require('ConstructorModule'))(options)(在我看来这是丑陋的;通常需要将其分组在文件的顶部并且仅在之后进行操作)。

注意:你的问题确实没有具体的答案,所以很有可能会因为不合适而被关闭。