使用require将值传递给导出的函数

时间:2017-12-11 22:52:09

标签: javascript require

如果我导出这样的函数:

const foo = "text";
const bar = function() {
    ...
}

module.exports = {
    foo,
    bar,
};

使用require导入时,有没有办法运行函数bar,例如

const { bar } = require('./myExports.js')('argForBar');

...

(目前,当我这样做时,我收到错误TypeError: require(...) is not a function

2 个答案:

答案 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函数,同时它仍然是具有foobar属性的对象。 但这完全令人费解,我感觉不到你正在寻找什么