• {Object}

    module.exports 对象由 Module 系统创建。 有时这是不可接受的;许多人希望他们的模块成为某个类的实例。 为此,需要将期望导出的对象赋值给 module.exports。 将期望的对象赋值给 exports 会简单地重新绑定本地的 exports 变量,这可能不是所期望的。

    例如,假设正在创建一个名为 a.js 的模块:

    1. const EventEmitter = require('events');
    2. module.exports = new EventEmitter();
    3. // 处理一些工作,并在一段时间后从模块自身触发 'ready' 事件。
    4. setTimeout(() => {
    5. module.exports.emit('ready');
    6. }, 1000);

    然后,在另一个文件中可以这么做:

    1. const a = require('./a');
    2. a.on('ready', () => {
    3. console.log('模块 a 已准备好');
    4. });

    module.exports 的赋值必须立即完成。 不能在任何回调中完成。 以下是不起作用的:

    x.js:

    1. setTimeout(() => {
    2. module.exports = { a: 'hello' };
    3. }, 0);

    y.js:

    1. const x = require('./x');
    2. console.log(x.a);