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;
}
相關用法
- Node.js module.builtinModules用法及代碼示例
- Node.js module.createRequire(filename)用法及代碼示例
- Node.js module.syncBuiltinESMExports()用法及代碼示例
- Node.js http.IncomingMessage message.rawHeaders用法及代碼示例
- Node.js http.IncomingMessage message.url用法及代碼示例
- Node.js http.IncomingMessage message.complete用法及代碼示例
- Node.js http.IncomingMessage message.headers用法及代碼示例
- Node.js ServerHttp2Stream http2stream.pushStream(headers[, options], callback)用法及代碼示例
- Node.js http2.Http2ServerRequest request.url用法及代碼示例
- Node.js request.socket用法及代碼示例
- Node.js assert.notEqual(actual, expected[, message])用法及代碼示例
- Node.js tlsSocket.authorized用法及代碼示例
- Node.js zlib.deflateRaw()用法及代碼示例
- Node.js Console用法及代碼示例
- Node.js GM transparent()用法及代碼示例
- Node.js URL.protocol用法及代碼示例
- Node.js http.Agent.reuseSocket(socket, request)用法及代碼示例
- Node.js fs.filehandle.datasync()用法及代碼示例
- Node.js socket.bind()用法及代碼示例
- Node.js v8.getHeapSpaceStatistics()用法及代碼示例
- Node.js http2session.destroyed用法及代碼示例
- Node.js http.ServerResponse response.statusCode用法及代碼示例
- Node.js Buffer buf.writeBigUInt64BE(value[, offset])用法及代碼示例
- Node.js Http2ServerResponse.finished用法及代碼示例
- Node.js Http2Stream close用法及代碼示例
注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 module.exports。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。