添加vercel.json导致SvelteKit项目Vercel部署失败
排查SvelteKit + Vercel定时任务部署失败问题
核心问题:服务器端调用客户端API
invalidate是SvelteKit仅客户端可用的导航API(来自$app/navigation),在服务器端的+server.js中调用会直接触发运行时错误,这是导致部署失败的最可能原因。- 解决方案:替换为服务器端可执行的逻辑——如果你需要更新数据,直接调用数据更新函数(比如操作数据库、拉取远程数据等),而非依赖客户端的缓存失效操作。
修正后的示例代码
// src/routes/api/cron/+server.js // 替换为你实际的数据更新逻辑 import { refreshCalendarData } from '$lib/calendar-utils'; export async function GET(req) { // 验证Vercel Cron的请求签名 if (req.headers.get('Authorization') === `Bearer ${process.env.CRON_SECRET}`) { try { await refreshCalendarData(); return new Response("Cron job executed successfully", { status: 200 }); } catch (err) { console.error('Cron job failed:', err); return new Response("Job failed", { status: 500 }); } } else { return new Response('Unauthorized', { status: 401 }); } }
额外排查步骤
- 检查vercel.json配置:确认
path与你的API路由完全匹配(你的/api/cron对应src/routes/api/cron/+server.js,路径是正确的);Cron表达式* * * * *是合法的每分钟执行计划。 - 环境变量验证:确保Vercel项目的生产环境已配置
CRON_SECRET变量,且部署时已同步。 - 本地预测试:用
vercel dev启动本地开发服务器,手动调用/api/cron接口,查看控制台是否有报错,提前发现问题。 - 查看部署日志细节:在Vercel部署详情页切换到「Functions」标签,查看Serverless函数的构建/运行日志,可能会显示代码层面的错误信息。
内容的提问来源于stack exchange,提问作者Gabriel Ratener
相关产品推荐
相关产品推荐

