使用GitHub Actions运行Vite+React单元测试时遇supabaseUrl必填错误
解决GitHub Actions中Supabase环境变量无法加载的问题
问题分析
本地运行npm run test正常,但GitHub Actions中测试报错supabaseUrl is required,核心原因是:
- 本地通过
dotenv从.env文件加载变量,而CI环境中没有该文件(不提交.env到仓库是正确的安全操作)。 - 虽然在Actions工作流中配置了环境变量,但可能因
dotenv的加载逻辑或变量传递问题,导致Supabase客户端初始化失败。
解决方案
方案1:优化Supabase客户端初始化逻辑
修改supabase.js,让dotenv仅在非CI环境加载(CI环境由Actions直接注入变量),同时增加变量校验,避免隐式错误:
// 仅在非CI环境加载dotenv,避免在Actions中尝试读取不存在的.env文件 if (!process.env.CI) { // 根据项目结构调整.env路径,比如.env在api目录下用"./.env",在根目录用"../.env" require("dotenv").config({ path: "../.env" }); } const { createClient } = require("@supabase/supabase-js"); // 显式获取并校验环境变量 const supabaseUrl = process.env.SUPABASE_URL; const supabaseKey = process.env.SUPABASE_KEY; if (!supabaseUrl || !supabaseKey) { throw new Error("必须设置SUPABASE_URL和SUPABASE_KEY环境变量"); } const supabase = createClient(supabaseUrl, supabaseKey); module.exports = { supabase };
方案2:在Actions中临时生成.env文件
如果不想修改代码,可以在工作流中添加步骤,将GitHub Secrets写入临时.env文件,让dotenv能正常读取:
修改.github/workflows/tests.yml,在Install dependencies之后、Run tests之前添加:
- name: 生成临时.env文件 working-directory: ./api run: | echo "SUPABASE_URL=${{ secrets.SUPABASE_URL }}" >> .env echo "SUPABASE_KEY=${{ secrets.SUPABASE_KEY }}" >> .env
方案3:排查环境变量是否正确注入
先确认Actions中的环境变量是否真的存在,添加打印步骤验证:
- name: 检查环境变量 working-directory: ./api run: | echo "SUPABASE_URL: $SUPABASE_URL" echo "SUPABASE_KEY: $SUPABASE_KEY"
运行后查看Actions日志,如果变量为空,说明GitHub Secrets未正确设置,需要检查仓库的Settings > Secrets and variables > Actions中是否添加了正确的密钥。
注意事项
- GitHub Secrets是大小写敏感的,确保工作流中引用的名称和Secrets设置的完全一致。
- 永远不要将
.env文件提交到仓库,避免密钥泄露。
内容的提问来源于stack exchange,提问作者thibaultk
相关产品推荐
相关产品推荐

