當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Node.js module.exports用法及代碼示例


module.exports

添加於:v0.1.16

module.exports 對象由Module 係統創建。有時這是不可接受的;許多人希望他們的模塊成為某個類的實例。為此,請將所需的導出對象分配給 module.exports 。將所需對象分配給exports 將簡單地重新綁定本地exports 變量,這可能不是所需的。

例如,假設我們正在製作一個名為 a.js 的模塊:

const EventEmitter = require('node:events');

module.exports = new EventEmitter();

// Do some work, and after some time emit
// the 'ready' event from the module itself.
setTimeout(() => {
  module.exports.emit('ready');
}, 1000);

然後在另一個文件中我們可以這樣做:

const a = require('./a');
a.on('ready', () => {
  console.log('module "a" is ready');
});

必須立即分配給module.exports。它不能在任何回調中完成。這不起作用:

x.js

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

y.js

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

exports捷徑#

添加於:v0.1.16

exports 變量在模塊的file-level 範圍內可用,並在評估模塊之前分配了module.exports 的值。

它允許使用快捷方式,以便 module.exports.f = ... 可以更簡潔地寫為 exports.f = ... 。但是,請注意,與任何變量一樣,如果將新值分配給 exports ,它將不再綁定到 module.exports

module.exports.hello = true; // Exported from require of module
exports = { hello: false };  // Not exported, only available in the module

module.exports 屬性被新對象完全替換時,通常還會重新分配 exports

module.exports = exports = function Constructor() {
  // ... etc.
};

為了說明這種行為,想象一下 require() 的這個假設實現,它與 require() 實際完成的非常相似:

function require(/* ... */) {
  const module = { exports: {} };
  ((module, exports) => {
    // Module code here. In this example, define a function.
    function someFunc() {}
    exports = someFunc;
    // At this point, exports is no longer a shortcut to module.exports, and
    // this module will still export an empty default object.
    module.exports = someFunc;
    // At this point, the module will now export someFunc, instead of the
    // default object.
  })(module, module.exports);
  return module.exports;
}

相關用法


注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 module.exports。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。