0

我正在尝试使用 socket.io 设置服务器(API)和它们之间连接的客户端,这是我使用热重载的 esbuild 配置esbuild-serve(客户端在端口 7000 上运行,BE 在 8000 上运行)

import esbuildServe from 'esbuild-serve'

esbuildServe(
  {
    logLevel: 'info',
    entryPoints: ['src/index.js'],
    // platform: 'node',
    // target: ['node16.13'],
    // format: 'cjs',
    bundle: true,
    outfile: 'dist/main.js',
    external: ['socket.io'],
    sourcemap: true,
    minify: true
  },
  {
    port: 8000,
    root: 'dist'
  }
)

这是我的项目树,Docker 只需使用 node 16 基础映像并运行命令node esbuild.config.js来启动开发热重载服务器并实例化 2 个 node.js 映像,暴露 7000(客户端)、8000(BE)、8001(websocket 端口)

在此处输入图像描述

客户端代码似乎工作正常:

import { io } from 'socket.io-client'

const socket = io('localhost:8001')

socket.on('connect', (socket) => {
  console.log(socket)
})

socket.on('message', function (data) {
  console.log('message', data.message)
})

这是似乎没有正确捆绑的 BE 代码

// import { createServer } from 'http'
import { Server } from 'socket.io'

// const httpServer = createServer()

// const io = new Server(httpServer, {
const io = new Server({
  port: 8001,
  cors: {
    origin: '*'
  }
})


io.on('connection', function (socket) {
  socket.emit('message', { message: 'A new user has joined!' })
})

// httpServer.listen(8001)

// io.emit('connection', (socket) => {
//   return socket
// })

通过删除external: ['socket.io'],它开始抱怨 node_module 缺少依赖项,所以我按照它的建议启用这些设置:

platform: 'node',
target: ['node16.13'],
format: 'cjs',

但是,一旦我加载 localhost:8000,编译版本就会出现此错误Uncaught ReferenceError: require is not defined

更新:

我已将格式更改cjsesm,现在似乎可以编译,但没有抛出这个新错误:

Uncaught TypeError: Failed to resolve module specifier "socket.io". Relative references must start with either "/", "./", or "../"

4

0 回答 0