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

Javascript 使用require将值传递给导出的函数,javascript,require,Javascript,Require,如果我导出这样的函数: const foo = "text"; const bar = function() { ... } module.exports = { foo, bar, }; 在使用require导入时,是否有任何方法可以运行功能bar,例如 const { bar } = require('./myExports.js')('argForBar'); ? (当前,当我执行此操作时,我得到一个错误TypeError:require(…)不是一个函数)导

如果我导出这样的函数:

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

module.exports = {
    foo,
    bar,
};
在使用require导入时,是否有任何方法可以运行功能
bar
,例如

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


(当前,当我执行此操作时,我得到一个错误
TypeError:require(…)不是一个函数

导入语句的语法是a,它只是从对象属性声明变量的语法糖。您可以在赋值后调用
bar
,以获取新对象,也可以按照Kevin Jantzer的建议,在同一行中调用该方法:

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

const { bar, foo } = require('./myExports.js');
const barInstance = bar('argForBar');
require('./myExports')
返回一个对象,所以不能像调用函数一样调用它。如果只导出一个包含两个字段的对象,您将始终得到“require(…)不是函数”错误

你有其他选择,如:

const bar = require('./myExports.js').bar('argForBar');
不需要进行分解,或者:

const {barF} = require('./myExports.js');
const bar = barF('argForBar');
它将
bar
函数分解为
barF
常量,然后调用它

这些有什么问题吗

在最坏的情况下,您可以执行此技巧,并导出一个恰好具有属性的函数,而不是普通对象:

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

const exported = function(param){
    return bar(param)
}

exported.foo = foo;
exported.bar = bar;

module.exports = exported;

这样,当模块仍然是一个具有
foo
bar
属性的对象时,可以将其作为
bar
函数调用但这完全令人费解,我觉得这不是您想要的

当你说“运行函数”时,你指的是
bar
?为什么不在定义常量后直接调用
bar('argForBar')
?您是否尝试过
require('./myExports.js').bar('argForBar')
这是为什么?如果导出具有静态属性的类(特别是在ES5模式下),则TypeScript transpiler几乎完全遵循这种模式。