Functionality of require() in nodeJS
我有一个关于require()如何在nodejs应用程序中工作的基本查询。
require()实际返回什么??
例如,假设我想使用2个第三方软件包:lodash和request。安装软件包后,我们可以将代码编写为:
1 2
| const _ = require('lodash')
_.uniq(Array) |
那么,我应该理解,require()在这里返回一个对象,uniq是来自对象_的方法吗?
现在让我们考虑一下request包,
1 2 3 4 5 6 7 8
| const request = require('request')
request (
{
url: '',
json:true
}
callback_function()
) |
因此,我应该理解,require()直接返回了一个方法-request()。
如果我使用以下相同的方法,我会遇到一个类型错误,即req1.request is not a method。
1 2 3 4 5 6 7 8
| const req1 = require('request');
req1.request (
{
url: '',
json:true
}
callback_function()
) |
请帮助我理解这一点。
- 1所以我应该理解,require()在这里返回一个对象,uniq是来自对象yes 2的方法。我可以理解,require()直接返回了一个方法-request()。不,在这里,request本可以是bottle的。它只是一个变量名。但它持有通过引用包的module.exports导出的任何内容。
- 嗨@ Adelin。谢谢你的解释。我已经从安装的软件包中浏览了uniq.js和request.js。我发现这里的代码是-module.exports = uniq;和module.exports = Request。他们也不出口任何物品。你能解释一下为什么我们用_.uniq()而不是直接用uniq()吗?谢谢你
requirereturns无论定义的模块。有时,该模块定义一个单一的功能:
1
| exports = function request(/*...*/); |
……所以当你import的模块,这是你得到的。
有时,modules(exports出口对象是指当一个空白的模块是面向对象initially loaded,然后添加到modules取代,或面向对象):
1 2 3
| exports._ = {
// ...
}; |
……所以当你import的模块,这是你得到的。
这是到该模块。这是一个非常简单的系统。在modules文件(不更大的困惑与ecmascript(JavaScript)modules文件、JavaScript的工作从自己的modules稍differently node.js的)。
- 嗨,克劳德,非常感谢你的详细解释。我已经从安装的软件包中浏览了uniq.js和request.js。我发现这里的代码是-module.exports = uniq;和module.exports = Request。不,他们在哪里导出任何对象。你能解释一下为什么我们用_.uniq()而不是直接用uniq()吗?谢谢您。
- @metalhead——你不是在导入uniq.js,你是在导入lodash,它将其他文件的内容聚合到一个单独的模块中,它以_的形式导出(也可以直接导出),参见lodash.js,它是这样做的:(freeModule.exports = _)._ = _;(其中freeModule是module在引导中,这很复杂,因为它支持多模块系统)。
- 非常感谢你的解释。