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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。