如何通过GitHub Actions正确配置Next.js服务端运行时变量
问题分析
你遇到的核心问题是:服务端运行时环境变量未被Vercel部署环境加载。带NEXT_PUBLIC_前缀的变量会在构建时注入客户端代码,所以build步骤的env配置能生效;但像NEXT_RESEND_API这类服务端变量是在运行时读取的,仅在build阶段设置env无法让Vercel的运行环境感知到,必须将这些变量同步到Vercel的对应部署环境中。
解决方案
修改你的GitHub Actions配置,在拉取Vercel环境信息前,通过Vercel CLI将服务端变量设置到Vercel预览环境中,确保后续构建和部署步骤能正确读取这些变量。
修改后的完整配置如下:
name: Jest tests env: VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} on: push jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 安装依赖 run: yarn install - name: 执行Jest测试 run: yarn test - name: 安装Vercel CLI run: yarn global add vercel@latest - name: 将服务端变量同步到Vercel预览环境 run: | vercel env set NEXT_RESEND_API "${{ vars.NEXT_RESEND_API }}" preview --token=${{ secrets.VERCEL_TOKEN }} vercel env set NEXT_PRIVATE_PAYPAL_KEY "${{ vars.NEXT_PRIVATE_PAYPAL_KEY }}" preview --token=${{ secrets.VERCEL_TOKEN }} - name: 拉取Vercel环境信息 run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} - name: 构建项目产物 run: vercel build --token=${{ secrets.VERCEL_TOKEN }} env: NEXT_PUBLIC_MAPS_API: ${{ vars.NEXT_PUBLIC_MAPS_API }} NEXT_PUBLIC_PAYPAL_CLIENT_ID: ${{ vars.NEXT_PUBLIC_PAYPAL_CLIENT_ID }} - name: 部署项目产物到Vercel run: vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }}
关键说明
- 新增变量同步步骤:通过
vercel env set命令将服务端变量直接写入Vercel预览环境,确保Vercel运行时能读取到这些变量。 - 保留PUBLIC变量的build阶段配置:这类变量需要在构建时注入客户端代码,所以仍在build步骤的env中设置。
- 环境一致性:同步变量后执行
vercel pull,让本地构建环境和Vercel部署环境的变量保持一致,避免构建与运行时的变量差异。
内容的提问来源于stack exchange,提问作者uhidga
相关产品推荐
相关产品推荐

