You need to enable JavaScript to run this app. Node.js中如何导入socket.io npm包及解决默认导出导入报错
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.14 08:54:03