如何高效地导出相互依赖的Node.js函数
我有一个包含许多函数的Node.js模块:
myfuncs.js
:
var foo = function(d) { return d + 1 }) var bar = function(d) { return foo(d) + 2 } var baz = function(d) { return foo(d) + bar(d) + 3 })
我想在myfuncs.js
导出所有这些函数,以便在另一个模块中使用。 什么是完成这个最好的方法? 由于某些function在其他function中使用, 例如bar
和baz
使用foo
,我可以看到导出的唯一方法是列出所有这样的导出,以便它们在另一个模块中可用。
myfuncs.js
:
var foo = function(d) { return d + 1 }) var bar = function(d) { return foo(d) + 2 } var baz = function(d) { return foo(d) + bar(d) + 3 }) module.exports.foo = foo; module.exports.bar = bar; module.exports.baz = baz;
我的问题是,我有几十个function,并以这种方式导出每个function似乎效率低下。 有没有更好的方法来导出节点function?
你想要导出的所有函数都必须单独添加到导出对象(或其他对象)中。 这是没有办法的。
但是,有时更简单的方法来声明你的函数,使得声明已经使得它们的属性可以直接导出。
例如,你可以像这样声明它们:
var exportedFuncs = { foo: function() {...}, bar: function() {...}, baz: function() {...} }; module.exports = exportedFuncs;
当这样做时,如果bar
叫做foo
,那么你不得不把它叫做exportedFuncs.foo()
或者为它创build一个本地别名。
作为处理这个问题的常见方法,我所看到的很多是你原来的scheme和上面的scheme的组合,你可以像你一样声明所有的function:
var foo = function(d) { return d + 1 } var bar = function(d) { return foo(d) + 2 } var baz = function(d) { return foo(d) + bar(d) + 3 }
然后,你只声明你想要导出的函数的一个exports对象:
module.exports = { foo: foo, bar: bar, baz: baz };
在ES6中,最后一个声明可以用一些新的ES6对象初始化语法缩短很多:
module.exports = {foo, bar, baz};
你已经做的另一个变化是:
var foo = module.exports.foo = function(d) { return d + 1 } var bar = module.exports.bar = function(d) { return foo(d) + 2 } var baz = module.exports.baz = function(d) { return foo(d) + bar(d) + 3 }