使用 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
函数调用,同时它仍然是具有 foo
和 bar
属性的对象。 但这完全令人费解,我觉得这不是您要找的东西。
如果我像这样导出函数:
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
函数调用,同时它仍然是具有 foo
和 bar
属性的对象。 但这完全令人费解,我觉得这不是您要找的东西。