在 Node 中,为什么 'require' 赋值有时需要大括号?
In Node, why does 'require' assignment sometimes require curly brackets?
运行 通过 Chai 进行的一些测试,我注意到在这段代码下测试会失败:
const add = require('./addition');
//'add is not a function error' even though it's directly exported as a function
但它会通过这个:
const {add} = require('./addition');
然而,当使用 npm 模块时,所有内容都在没有括号的情况下声明:
var express = require('express');
var app = express();
var session = require('express-session');
那些本质上是具有多个属性的对象,可以访问。为什么会这样?是否只有函数导出必须显式指定为对象?
这称为对象解构。请参考link.
例如,您导出了一个名为 sampleFunctions.js 的文件,该文件具有以下导出功能
function function1(params) {};
function function2(params) {};
module.exports = {
sampleFunc1: function1,
sampleFunc2: function2
}
现在当你需要它的时候,有两种方法 -
- 当你只需要一个函数时(使用对象解构)
let {sampleFunc1} = require('./sampleFunctions');
sampleFunc1();
在此您只公开了所需的函数,而不是从该文件导出的所有函数。
- 当您需要该文件中的所有函数时
let sampleFuncs = require('./sampleFunctions');
let samFunc1 = sampleFuncs.sampleFunc1;
samFunc1()
运行 通过 Chai 进行的一些测试,我注意到在这段代码下测试会失败:
const add = require('./addition');
//'add is not a function error' even though it's directly exported as a function
但它会通过这个:
const {add} = require('./addition');
然而,当使用 npm 模块时,所有内容都在没有括号的情况下声明:
var express = require('express');
var app = express();
var session = require('express-session');
那些本质上是具有多个属性的对象,可以访问。为什么会这样?是否只有函数导出必须显式指定为对象?
这称为对象解构。请参考link.
例如,您导出了一个名为 sampleFunctions.js 的文件,该文件具有以下导出功能
function function1(params) {};
function function2(params) {};
module.exports = {
sampleFunc1: function1,
sampleFunc2: function2
}
现在当你需要它的时候,有两种方法 -
- 当你只需要一个函数时(使用对象解构)
let {sampleFunc1} = require('./sampleFunctions');
sampleFunc1();
在此您只公开了所需的函数,而不是从该文件导出的所有函数。
- 当您需要该文件中的所有函数时
let sampleFuncs = require('./sampleFunctions');
let samFunc1 = sampleFuncs.sampleFunc1;
samFunc1()