如何实现任意目录下Apollo GraphQL/Express部署到Vercel
Vercel自定义Apollo GraphQL服务入口路径配置方法
Vercel 默认仅将根目录下 api/ 文件夹内的文件识别为可执行的 Serverless Function,其他路径下的 JS 文件会被默认判定为静态资源,直接返回原始源码,这是移动入口文件后代码不执行的根本原因。
可通过以下两种方案实现自定义入口路径:
方案1:直接修改Vercel函数识别规则
在项目根目录的 vercel.json 中新增 functions 配置,指定自定义路径下的文件为服务端函数,同时对应调整重写规则即可,示例配置如下(假设你的入口文件存放在 src/server/index.js):
{ "functions": { "src/server/*.js": { "runtime": "@vercel/node@3" } }, "rewrites": [ { "source": "/(.*)", "destination": "/src/server/index" } ] }
配置注意事项:
functions字段支持glob路径匹配,所有匹配到的文件都会被识别为可执行的服务端函数,替换成你自己的实际存放路径即可- 重写规则的
destination路径不需要加.js后缀,Vercel会自动匹配对应函数 - 必须显式指定运行时为
@vercel/node,避免文件被识别为静态资源
方案2:通过api目录做轻量转发
如果不想修改Vercel默认的函数扫描规则,可以保留默认的api/index.js文件,仅在该文件内转发引入你存放在自定义路径的实际服务代码,示例:
// api/index.js export { default } from '../src/your-custom-path/apollo-entry.js'
这种方式不需要调整vercel.json的functions配置,原有重写规则可以保持不变,适合不想改动Vercel默认配置的场景。
常见踩坑点
- 仅修改重写规则不配置functions字段无效:重写仅做请求路径转发,不会改变Vercel对文件类型的判定逻辑
- Apollo Server 4+ 版本不要在部署入口使用
startStandaloneServer方法,该方法仅适用于本地开发,部署到Vercel需要导出符合Node运行时要求的请求处理函数 - 配置修改后需要重新触发全量部署,本地可通过
vercel dev命令提前验证路径识别是否正常
内容的提问来源于stack exchange,提问作者ReactDev
相关产品推荐
相关产品推荐

