Vercel部署SvelteKit时运行时环境变量未定义问题求助
解决SvelteKit部署Vercel后运行时私有环境变量undefined的问题
核心原因
$env/dynamic/private 读取的是Serverless/Edge函数运行时的私有环境变量,这类变量不会在构建阶段注入,而是在函数执行时从Vercel的运行时环境中读取。之前的操作要么用错了变量传递方式,要么存在命令拼写错误导致配置未生效。
具体修复步骤
1. 修正CircleCI中的命令拼写错误
你CircleCI配置里的enviornment是拼写错误,正确应为environment,这会导致vercel pull无法拉取对应环境的配置:
# 修正后的pull命令 vercel pull --yes environment=preview --token=$VERCEL_TOKEN
2. 在CI中直接注入运行时环境变量
不要用--build-env(这是给构建时变量用的),改用vercel env add命令将CircleCI中的变量直接添加到Vercel对应环境的运行时变量中:
# 在pull之后添加这一步,注入MY_ENV到Vercel preview环境 vercel env add MY_ENV preview --token=$VERCEL_TOKEN <<< "$MY_ENV" # 如果还有其他变量比如MY_REGION,同理添加 vercel env add MY_REGION preview --token=$VERCEL_TOKEN <<< "$MY_REGION"
注:如果部署的是生产环境,把preview换成production即可。
3. 确认Vercel UI中的变量配置(可选)
如果通过CI注入后仍有问题,手动在Vercel UI中检查:
- 进入项目的「Settings」→「Environment Variables」
- 添加
MY_ENV,确保变量的「Environment」选择对应环境(Preview/Production),并且不要勾选「Expose to Serverless Functions only」以外的选项(默认就是,确保它是运行时可用的私有变量)
4. 修正代码中的拼写错误
你的+layout.server.js里MY_REGOIN是拼写错误,应为MY_REGION,避免后续其他变量异常:
// 修正后 let my_region = env.MY_REGION;
验证部署
完成以上步骤后,重新运行CircleCI流水线,部署到Vercel后,运行时函数就能正确读取到MY_ENV变量了。
内容的提问来源于stack exchange,提问作者monte
相关产品推荐
相关产品推荐

