如何高效地导出相互依赖的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中使用, 例如barbaz使用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 }