Node.js中如何导入socket.io npm包及解决默认导出导入报错
报错根因
当前版本的socket.io npm包在对Node.js ES模块做适配时,采用命名导出规则,包本身不提供默认导出项。使用import Server from 'socket.io'这类默认导入语法时,Node.js模块解析器找不到对应名为default的导出目标,就会抛出指定的SyntaxError。
修复方案
将原有的默认导入写法替换为命名导入即可:import { Server } from 'socket.io';
常见配置注意事项
- 若项目采用ES模块规范开发,需要在项目根目录的
package.json中添加"type": "module"配置,否则Node.js会默认将.js文件识别为CommonJS模块,混用导入语法会触发额外解析错误 - 若项目采用CommonJS规范开发,对应导入写法为
const { Server } = require('socket.io');,无需强行套用ES模块的import语法 - Server实例初始化时,需要将其绑定到已创建的HTTP服务对象上,不能无依赖直接初始化空实例,否则会出现端口监听、跨域配置失效的问题
ES模块场景下的完整可运行代码示例:
import http from 'http'; import { Server } from 'socket.io'; // 创建基础HTTP服务 const httpServer = http.createServer(); // 初始化socket.io服务并绑定到HTTP实例 const io = new Server(httpServer, { cors: { origin: "*" } // 按需调整跨域配置规则 }); // 监听客户端连接事件 io.on('connection', (socket) => { console.log('新客户端接入,连接ID:', socket.id); }); httpServer.listen(3000, () => { console.log('实时通信服务已启动,端口:3000'); });
内容的提问来源于stack exchange,提问作者John John
相关产品推荐
相关产品推荐

