You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AdonisJS配置socket.io触发import模块外使用错误如何解决

AdonisJS集成SocketIO导入错误修复方案

报错核心原因:AdonisJS v5 默认将 TypeScript 编译为 CommonJS 格式,动态import()语法在 CommonJS 运行环境下会被识别为 ES 模块导入语句,和环境模块规范不匹配。强行修改 package.json 的"type": "module"配置会导致框架所有内置 CommonJS 逻辑失效,必须先删除该配置再执行以下修复步骤。

修复步骤

  • 步骤1:修改AppProvider.ts导入逻辑
    将providers/AppProvider.ts中ready方法的动态import改为CommonJS的require写法:

    public async ready () {
      // App is ready
      if (this.app.environment === 'web') {
        // 普通引入直接写require即可
        require('../start/socket')
        // 如果socket.ts用export default导出初始化逻辑,改为:
        // require('../start/socket').default()
      }
    }
    
  • 步骤2:校验start/socket.ts写法规范
    确保socket.ts的逻辑符合AdonisJS运行要求,参考写法:

    import { Server } from 'socket.io'
    import AdonisServer from '@ioc:Adonis/Core/Server'
    
    const io = new Server(AdonisServer.instance!, {
      cors: {
        origin: "*" // 按需替换为你的前端域名
      }
    })
    
    // 测试连接事件
    io.on('connection', (socket) => {
      console.log('新客户端连接:', socket.id)
    })
    
    export default io
    
  • 步骤3:确认依赖版本兼容
    安装适配AdonisJS v5的socket.io 4.x稳定版本:

    npm i socket.io@4.x
    # 或yarn
    yarn add socket.io@4.x
    
  • 步骤4:重启项目验证
    运行启动命令重新加载服务:
    node ace serve --watch

内容的提问来源于stack exchange,提问作者iamafasha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:54:07