【问题标题】:Functionality of require() in nodeJS [duplicate]nodeJS中require()的功能[重复]
【发布时间】:2018-11-26 23:23:03
【问题描述】:

我对 require() 在 nodeJS 应用程序中的工作方式有一个基本的疑问。

require() 实际上返回了什么??

例如,假设我想使用 2 个第三方软件包:lodash 和 request。安装包后,我们可以写成这样的代码:

const _ = require('lodash')
_.uniq(Array)

那么我应该明白require() 在这里返回一个对象而uniq 是来自对象_ 的方法吗?

现在让我们考虑request 包,

const request = require('request')
request (
{
  url: '',
  json:true
}
callback_function()
)

所以我这里应该明白require()直接返回了一个方法——request()

如果我使用下面的相同,我会遇到req1.request is not a method的类型错误。

const req1 = require('request');
req1.request (
{
  url: '',
  json:true
}
callback_function()
)

请帮助我理解这一点。

【问题讨论】:

  • 1 我应该明白require()在这里返回一个对象,uniq是来自对象的方法是2 。 这里我应该明白require() 直接返回了一个方法-request()。不,在这里,request 可能是bottle。这只是一个变量名。但是它包含通过引用包的module.exports 导出的任何内容
  • 嗨@Adelin.. 谢谢你的解释。我已经从已安装的软件包中浏览了uniq.js 和request.js。我发现那里的代码为 - module.exports = uniq; 和 module.exports = Request。他们在任何地方都没有导出任何对象。您能否解释一下为什么我们使用_.uniq() 而不是直接使用uniq()。谢谢

标签: javascript node.js requirejs


【解决方案1】:

require 返回模块定义的任何内容。有时,模块定义了一个函数:

exports = function request(/*...*/);

...所以当你导入模块时,这就是你得到的。

有时,模块会导出对象(exports 在模块加载时最初指的是空白对象,然后模块会添加或替换该对象):

exports._ = {
    // ...
};

...所以当你导入模块时,这就是你得到的。

这取决于模块。这是一个非常简单的系统。 Modules 文档中的更多内容(不要与 ECMAScript (JavaScript) Modules 文档混淆;JavaScript 自己的模块与 Node.js 的工作方式略有不同)。

【讨论】:

  • 嗨克劳德,非常感谢您的详细解释。我已经从已安装的软件包中浏览了uniq.js 和request.js。我发现那里的代码为 - module.exports = uniq; 和 module.exports = Request。并且没有他们在哪里导出任何对象。您能否解释一下为什么我们使用_.uniq() 而不是直接使用uniq()。谢谢。
  • @METALHEAD - 您不是在导入uniq.js,而是在导入lodash,它将其他文件的内容聚合到一个模块中,并将其导出为_(但也直接),请参阅lodash.js 这样做:(freeModule.exports = _)._ = _;(其中freeModule 在它们的引导中是module,这很复杂,因为它支持多个模块系统)。
  • 非常感谢您的解释。
猜你喜欢
  • 2015-05-14
  • 2015-01-04
  • 1970-01-01
  • 2015-11-15
  • 2016-04-16
  • 2019-01-01
  • 1970-01-01
  • 2018-05-30
相关资源
最近更新 更多