我想在Dispatch.js
中做这样的事情function handle(msg) {
....
}
exports = handle;
这在调用index.js
中var dispatch = require("./Dispatch);
dispatch("data");
有什么想法吗?
答案 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
对象。
如果导出是函数体所在范围内可见的变量,则不会出现问题。