Vercel部署完成后如何发起请求或运行Node.js脚本?
解决Vercel部署后自动调用第三方API的方案
方案1:使用Vercel Post-Deploy Hooks + Serverless Function
这是官方支持的原生方案,步骤如下:
- 在项目中创建Serverless Function文件(比如
api/add-whitelist.js),编写调用第三方API的逻辑:
- 在项目中创建Serverless Function文件(比如
export default async function handler(req, res) { // Vercel自动注入部署URL环境变量 const deployUrl = process.env.VERCEL_URL; if (!deployUrl) { return res.status(400).json({ error: '部署URL未找到' }); } try { // 调用第三方API添加白名单 const response = await fetch('第三方API地址', { method: 'POST', headers: { 'Content-Type': 'application/json', // 敏感密钥存Vercel环境变量,避免硬编码 'Authorization': `Bearer ${process.env.THIRD_PARTY_API_KEY}` }, body: JSON.stringify({ url: `https://${deployUrl}` }) }); if (!response.ok) { throw new Error('添加白名单失败'); } res.status(200).json({ success: true, url: `https://${deployUrl}` }); } catch (error) { res.status(500).json({ error: error.message }); } }
- 部署该Function到Vercel,获取其访问URL(比如
https://你的项目域名.vercel.app/api/add-whitelist)。
- 部署该Function到Vercel,获取其访问URL(比如
- 进入Vercel项目设置页,找到Git > Post-Deploy Hooks,点击"Add"填入上述Function URL,设置触发条件(默认每次部署后触发)。
- 在Vercel项目Settings > Environment Variables中添加第三方API密钥等敏感信息,确保代码可读取。
方案2:Vercel CLI + 本地Node脚本
如果需要在本地触发部署后执行脚本,可结合Vercel CLI实现:
- 编写本地Node脚本(比如
post-deploy.js):
- 编写本地Node脚本(比如
import fetch from 'node-fetch'; import { execSync } from 'child_process'; // 执行Vercel生产部署命令 execSync('vercel deploy --prod', { stdio: 'inherit' }); // 获取最新部署URL const deployUrl = execSync('vercel env get VERCEL_URL 你的项目名').toString().trim(); // 调用第三方API await fetch('第三方API地址', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${process.env.THIRD_PARTY_API_KEY}` }, body: JSON.stringify({ url: `https://${deployUrl}` }) }); console.log('URL已成功加入白名单');
- 在
package.json中添加脚本命令:
- 在
"scripts": { "deploy": "node post-deploy.js" }
- 运行
npm run deploy即可完成部署+调用API的流程,需提前配置Vercel CLI登录及项目关联。
- 运行
注意事项
- 若用方案1,需确保第三方API允许Vercel Serverless Function的请求来源;方案2则需确保本地IP在第三方API白名单内。
- 所有敏感信息必须存Vercel环境变量,禁止硬编码。
- 若需触发预览部署的白名单操作,可在Function中通过
VERCEL_ENV环境变量判断环境,或在Post-Deploy Hooks中设置触发预览部署。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

