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

部署在Vercel上的Elysia无法提供静态文件问题咨询

问题原因及解决方案

核心原因

Vercel的Bun runtime与Elysia静态文件服务不兼容,主要源于以下几点:

  • Vercel默认会优先接管public目录下的静态文件请求,不会转发给Elysia处理
  • Elysia的static插件路径或优先级设置不当,导致静态请求无法匹配
  • Vercel路由规则未配置,使得静态请求没有到达Elysia的处理逻辑

解决方案

方案1:让Elysia全权处理静态文件

  1. 正确配置Elysia的static插件,确保路径和优先级正确:
import { Elysia } from 'elysia'
import { staticPlugin } from '@elysiajs/static'

const app = new Elysia()
  // 优先加载静态插件,确保静态请求先被处理
  .use(staticPlugin({
    assets: './public', // 指向你的静态文件目录
    prefix: '/', // 根路径匹配所有静态请求
    alwaysStatic: true // 强制静态服务优先,避免和其他路由冲突
  }))
  // 其他业务路由
  .get('/api/hello', () => 'Hello from API')
  .listen(process.env.PORT || 3000)
  1. 修改vercel.json,让所有请求都转发到Elysia入口文件:
{
  "functions": {
    "index.ts": {
      "runtime": "@vercel/bun@1.0.0"
    }
  },
  "routes": [
    {
      "src": "/(.*)",
      "dest": "index.ts"
    }
  ]
}
  1. 检查.vercelignore,确保没有忽略public目录:
# 不要包含这行:
# public/

方案2:让Vercel接管静态文件(更轻量)

如果不需要Elysia处理静态文件,可以直接利用Vercel的原生静态服务:

  1. 将所有静态文件放在项目根目录的public文件夹下
  2. 移除Elysia中的static插件配置
  3. 修改vercel.json,让API请求转发到Elysia,静态请求由Vercel直接处理:
{
  "functions": {
    "index.ts": {
      "runtime": "@vercel/bun@1.0.0"
    }
  },
  "routes": [
    {
      "src": "/api/(.*)",
      "dest": "index.ts"
    },
    {
      "src": "/(.*)",
      "dest": "/public/$1"
    }
  ]
}

额外注意事项

  • 确保@elysiajs/static插件是最新版本,避免兼容性问题:
bun add @elysiajs/static@latest
  • 部署前本地测试静态文件是否能正常访问,再推送到Vercel验证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 05:22:30