Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何高效导出相互依赖的Node.js函数_Node.js - Fatal编程技术网

如何高效导出相互依赖的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)

我有一个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) + 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。我在我的答案中增加了一个变体。