如何知晓Node.js模块导出内容及正确调用方式?
如何判断Node.js模块的导出类型?
你总结的三种Node.js模块导出场景非常到位!要快速判断一个模块属于哪种导出类型(要不要用new、是直接用对象还是调用函数拿实例),我常用这几个方法:
1. 优先看官方文档
这是最省心的方式,绝大多数主流Node.js模块都会在文档里明确说明导出的类型。比如:
http模块文档会告诉你它导出的是一个包含createServer等方法的对象;events模块会明确标注它导出的是EventEmitter构造函数,需要通过new来创建实例;connect模块则会说明导出的是一个工厂函数,调用后返回应用对象。
2. 在Node.js REPL里快速测试
打开终端输入node进入交互环境,几步就能搞清楚:
- 判断是否为对象导出:
const http = require('http'); typeof http; // 输出 'object',直接用它的方法就行 - 判断是否为构造函数:
const EventEmitter = require('events'); typeof EventEmitter; // 输出 'function',再试下用new创建实例: const emitter = new EventEmitter(); // 能正常创建,说明是构造函数 - 判断是否为返回对象的函数:
const connect = require('connect'); typeof connect; // 输出 'function',直接调用它: const app = connect(); typeof app; // 输出 'object',说明这个函数是用来生成实例的
也可以用console.dir()打印导出内容的结构,能直观看到里面的方法和属性。
3. 直接查看模块源码
如果想刨根问底,找到项目里node_modules下对应模块的主文件(一般看模块package.json里的main字段),看它的module.exports写法:
- 如果是
module.exports = { createServer: ... }这类,就是导出对象; - 如果是
module.exports = function EventEmitter() { ... },就是导出构造函数; - 如果是
module.exports = function() { return { ... }; },就是导出会返回对象的工厂函数。
简单总结下:
- 导出对象:直接
require后调用其方法; - 导出构造函数:需要用
new创建实例再使用; - 导出工厂函数:直接调用函数得到实例对象。
内容的提问来源于stack exchange,提问作者chanakya sunkarapally
相关产品推荐
相关产品推荐

