查看的框架的随机源文件,有两行我不理解的代码(这些代码行几乎是所有NodeJS文件的代表)。express``NodeJS
express``NodeJS
/** * Expose `Router` constructor. */ exports = module.exports = Router;
和
/** * Expose HTTP methods. */ var methods = exports.methods = require('./methods');
我知道 第一段代码 允许文件中的其余功能公开给NodeJS应用程序使用 ,但我不清楚 它的工作原理 或该行代码的含义。
什么exports和module.exports实际上的意思吗?
exports
module.exports
我相信第二段代码允许访问文件中的函数methods,但同样,它是如何做到这一点的。
methods
基本上,这些是什么神奇的话: module 和 exports ?
module
更具体:
module 是文件内的全局范围变量。
因此,如果您致电require("foo"):
require("foo")
// foo.js console.log(this === module); // true
它的行为与window在浏览器中的行为相同。
window
还有一个称为的全局对象global,您可以在所需的任何文件中进行读写,但这涉及到更改全局范围,这就是 EVIL
global
exports是存在的变量module.exports。基本上,这是您在需要文件时 导出 的内容。
// foo.js module.exports = 42; // main.js console.log(require("foo") === 42); // true
单独存在一个小问题exports。在_global范围上下文+和module是 不 一样的。(在浏览器中,全局范围上下文与之window相同)。
// foo.js var exports = {}; // creates a new local variable called exports, and conflicts with // living on module.exports exports = {}; // does the same as above module.exports = {}; // just works because its the "correct" exports // bar.js exports.foo = 42; // this does not create a new exports variable so it just works