如果我导出这样的函数:
const foo = "text";
const bar = function() {
...
}
module.exports = {
foo,
bar,
};
使用require导入时,有没有办法运行函数bar
,例如
const { bar } = require('./myExports.js')('argForBar');
...
(目前,当我这样做时,我收到错误TypeError: require(...) is not a function
)
答案 0 :(得分:1)
import语句的语法是destructuring assignment,它只是用于从对象属性声明变量的语法糖。您可以在分配后调用bar
以获取新对象,也可以像Kevin Jantzer建议的那样调用并在同一行中调用该方法:
const bar = require('./myExports.js').bar('argForBar');
const { bar, foo } = require('./myExports.js');
const barInstance = bar('argForBar');
答案 1 :(得分:1)
require('./myExports')
返回一个对象,因此您不能像函数一样调用它。如果您使用两个字段导出只是一个对象,您将始终得到'require(...)不是函数'错误。
你有其他选择:
const bar = require('./myExports.js').bar('argForBar');
不需要解构,或者:
const {barF} = require('./myExports.js');
const bar = barF('argForBar');
将bar
函数解构为barF
const,然后调用它。
其中任何一个都有问题吗?
最糟糕的是,你可以做这个技巧,并导出一个恰好具有属性的函数,而不是普通的对象:
const foo = "text";
const bar = function() {
...
}
const exported = function(param){
return bar(param)
}
exported.foo = foo;
exported.bar = bar;
module.exports = exported;
这样,您可以将模块调用为bar
函数,同时它仍然是具有foo
和bar
属性的对象。 但这完全令人费解,我感觉不到你正在寻找什么。