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

Vercel部署NextJS时含index.ts的/api目录下路由缺失如何解决

问题成因

  1. Vercel 针对 Next.js Pages Router 的打包优化缺陷:在 Next.js 12.x ~ 13.2.x 版本对应的官方构建器中,部署时会对同目录下的API路由做lambda合并优化,当某个API目录下存在index.ts/index.js文件时,优化逻辑会错误将整个目录识别为单一路由入口,直接打包为对应index路由的单个lambda,同目录下的其他独立路由文件会被当作冗余资源过滤,不会注册为独立的路由入口。本地开发时走按需编译逻辑,不会触发该优化,因此仅部署后可复现。
  2. 边缘路由规则匹配冲突:Vercel 边缘节点的路由规则会优先匹配目录级的index路由,误将同目录下的其他路径识别为index路由的子路径,不会为其生成独立的路由映射,导致请求无法命中对应逻辑。

可行规避方案

  • 方案1:调整目录结构,避免在包含其他路由文件的目录下放置index路由文件
    把需要作为目录根路由的index.ts重命名为和目录同名的文件,上移到父级目录。比如把/api/companies/index.ts改为/api/companies.ts,原目录下保留another-endpoint.ts,调整后结构如下:
    /api/companies.ts // 对应路由 /api/companies
    /api/companies/another-endpoint.ts // 对应路由 /api/companies/another-endpoint
    
    该方案改动最小,适配所有Next.js版本,无额外配置成本。
  • 方案2:升级到Next.js 13.4+的App Router版本
    Next.js 13.4稳定版之后的App Router采用Route Handler处理API逻辑,路由规则完全重构,Vercel针对新的App Router构建逻辑已经修复了该问题,如果可以接受迁移到App Router,直接把API逻辑迁移到app/api目录下的Route Handler即可,原目录结构不需要调整。
  • 方案3:修改next.config.js强制关闭打包优化
    如果暂时不能调整目录结构也不能升级版本,可以在配置文件中添加配置强制扫描所有API文件,跳过lambda合并优化逻辑:
    // next.config.js
    module.exports = {
      experimental: {
        workerThreads: false,
        cpus: 1
      }
    }
    
    该方案仅针对特定版本有效,可能会增加构建时长。
  • 方案4:使用catch-all路由统一处理同目录请求
    如果需要保留原目录结构,可以删除index.ts,新增[...slug].ts catch-all路由,在单个文件内处理该目录下的所有路径请求,手动区分不同路径的处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:24:05