如何用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
相关产品推荐
相关产品推荐

