node.js模块/导出系统:是否可以将模块导出为函数

时间:2011-05-09 15:57:26

标签: javascript module node.js

我想在Dispatch.js

中做这样的事情
function handle(msg) {
    ....
}
exports = handle;

这在调用index.js

var dispatch = require("./Dispatch);
dispatch("data");

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

exports = handle

这会创建一个名为exports的局部变量。这与覆盖module.exports不同。

module.exports = handle

这将覆盖模块范围内的exports变量,然后由require读取。

在浏览器中window["foo"]foo相同,但在节点module["foo"]foo中行为略有不同。

局部变量范围上下文和module不是一回事。

答案 1 :(得分:1)

执行:

function handle(msg) {
    ....
}
module.exports = handle;

它按照你想要的方式工作。

答案 2 :(得分:0)

此问题背后的问题(exports vs module.exports vs exports.something)在本文中有最好的描述:

http://www.alistapart.com/articles/getoutbindingsituations

第一个版本(exports = handle)正是问题所在:javascript中必需的缺失绑定:

exports = handle表示window.exports = handle(或者node.js作为全局对象的任何内容)

答案 3 :(得分:0)

另一种看待问题的方法是考虑节点如何加载模块:

function loadModule(module, exports) {

这里有你的模块代码

}

如果您的代码覆盖exports参数(exports = handle),则此更改在此函数外部不可见。对于这种覆盖,可以使用module对象。

如果导出是函数体所在范围内可见的变量,则不会出现问题。