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

如何用Node适配器在Vercel部署集成Socket.io的SvelteKit应用?

解决方案

1. 调整根目录index.js适配Vercel运行时

Vercel的@vercel/node运行时要求导出可被平台调用的请求处理程序,而非自行启动服务器。修改你的index.js如下:

import express from 'express';
import { createServer } from 'http';
import injectSocketIO from './src/lib/websockets/socketIoHandler.js';
import { handler } from './build/handler.js';

const app = express();
const server = createServer(app);

// 注入SocketIO逻辑
injectSocketIO(server);

// 挂载SvelteKit的请求处理程序
app.use(handler);

// 导出Vercel兼容的处理程序
export default app;

// 仅本地开发时启动服务器
if (process.env.NODE_ENV !== 'production') {
  server.listen(3000, () => {
    console.log('Running on http://localhost:3000');
  });
}

2. 更新vercel.json配置

确保Vercel先完成SvelteKit构建,再处理自定义服务器,同时修正路由规则:

{
  "version": 2,
  "builds": [
    {
      "src": "./index.js",
      "use": "@vercel/node",
      "config": {
        "buildCommand": "npm run build"
      }
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "/index.js"
    }
  ]
}

3. 验证SocketIO适配逻辑

  • 确保injectSocketIO函数不硬编码端口,生产环境依赖Vercel提供的环境变量
  • SocketIO配置中添加transports: ['websocket', 'polling'],兼容Vercel网络环境

4. 本地模拟部署验证

执行vercel dev命令,模拟Vercel运行环境,检查WebSocket连接和页面路由是否正常工作,排除本地与生产环境的差异。

5. 确认生产依赖

将express和socket.io添加到项目dependencies(而非devDependencies),避免Vercel构建时遗漏依赖:

npm install express socket.io

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:35:17