如何高效导出相互依赖的Node.js函数
我有一个Node.js模块,包含许多函数:如何高效导出相互依赖的Node.js函数,node.js,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 }) var foo = function(d) { return d + 1 }) var bar = function(d) { return foo(d)
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 })
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;
我想在myfuncs.js
中导出所有这些函数,以便在另一个模块中使用。实现这一目标的最佳方式是什么?因为有些函数用于其他函数;例如,在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 })
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;
我的问题是我有几十个函数,以这种方式导出每个函数似乎效率低下。是否有更好的方法导出节点函数?所有要导出的函数都必须分别添加到导出对象(或其他对象)中。这是没有办法的 但是,有时也有更简单的方法来声明函数,例如声明已经使它们成为可以直接导出的对象上的属性 例如,您可以这样声明它们:
var exportedFuncs = {
foo: function() {...},
bar: function() {...},
baz: function() {...}
};
module.exports = exportedFuncs;
这样做时,如果bar
调用了foo
,则必须将其称为exportedFuncs.foo()
,或者为其创建本地别名
我经常看到的处理这一问题的常用方法是将原始方案与上述方案相结合,您可以像现在这样单独声明所有函数:
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,
bar: bar,
baz: baz
};
在ES6中,最后一个声明可以大大缩短,包括:
您已经在做的另一个变化是:
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 }
您甚至可以这样做:exports.foo=foo=function(){};exports.bar=bar=function(){};exports.baz=baz=function(){}@叶利纳里德-thx。我在我的答案中增加了一个变体。