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

Pass a value to exported function using 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

您的 import 语句的语法是 destructuring assignment,它只是从对象 属性 声明变量的语法糖。您可以在分配后调用 bar 来获取新对象,或者您可以按照 Kevin Jantzer 的建议在同一行中调用该方法:

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

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

require('./myExports') returns 一个对象,所以你不能像函数一样调用它。如果您仅导出 一个具有两个字段的对象 ,您将始终遇到 'require(...) is not a function' 错误。

您有以下选择:

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;

这样,您就可以将模块作为 bar 函数调用,同时它仍然是具有 foobar 属性的对象。 但这完全令人费解,我觉得这不是您要找的东西