【问题标题】:Nodejs uses variable assignment to load modulesNodejs 使用变量赋值来加载模块
【发布时间】:2015-01-15 01:38:29
【问题描述】:

大多数语言使用“导入”指令来加载其他模块代码,例如 爪哇 -

import a.b.c

省略号-

(load a)

蟒蛇-

from a import b

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

var a = require('a')

我明白了,大多数 JavaScript IDE,如 tern.js-emacs、nodeclipse 都无法正确地进行源代码查找(对于加载的模块),因为 IDE 必须运行代码(或)执行 eval 来找出什么加载的模块对象包含的属性。

【问题讨论】:

  • ECMAScript 5.1 (es5.github.io) 是 Node.js 运行的语言。它没有进口。 ES6 支持,当 V8 支持它时,node 将支持它。同时,如果您愿意,现在有 ES6 -> ES5 转换器允许您在 JS 中使用 import。
  • 这样就可以使用变量来引用返回的对象。以a.someMethodOfA(); 为例。

标签: javascript node.js ecmascript-5


【解决方案1】:

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

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

不将模块分配给变量的更常见示例是使用require 只是为了从模块中获取一些属性——例如var x = require('module').methodOfInterest。类似地,一些模块返回一个构造函数,所以你有时可能会看到var instance = new (require('ConstructorModule'))(options)(在我看来这很难看;require 通常应该放在文件的顶部,然后才起作用)。

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

【讨论】:

    猜你喜欢
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2017-04-13
    相关资源
    最近更新 更多