You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit公共环境变量Rollup构建错误求助

解决SvelteKit CI构建中PUBLIC环境变量未导出的RollupError问题

问题根源

在SvelteKit中,$env/dynamic/public导出的变量依赖于项目中定义的PUBLIC_前缀环境变量。CI环境中因为没有.env文件(也不应该提交),导致SvelteKit无法识别你导入的PUBLIC_SUPABASE_KEY,进而触发Rollup的导出不存在错误。同时npm run check生成类型的前提是能读取到.env里的变量,这在无.env的CI环境中不适用。

可行解决方案

方案1:手动声明环境变量类型

直接创建类型定义文件,不需要依赖.env自动生成类型,这是最直接的方式:

  1. 在项目的src目录下创建env.d.ts文件
  2. 添加如下内容:
/// <reference types="@sveltejs/kit" />

declare namespace App {
    interface PublicEnv {
        PUBLIC_SUPABASE_KEY: string;
        // 若有其他PUBLIC_前缀的环境变量,一并在此声明
    }
}

这个文件会被TypeScript识别,告诉SvelteKit这些公共环境变量是存在的,构建时就不会报错。

方案2:使用.env.example配合CI变量注入

  1. 在项目根目录创建.env.example文件,填入所有需要的PUBLIC_变量(值用占位符):
PUBLIC_SUPABASE_KEY=your-supabase-key-placeholder

将这个文件提交到代码仓库,作为变量的文档和类型生成依据。
2. 在CI环境中,构建前通过CI的密钥管理系统注入真实的环境变量:

  • 以GitHub Actions为例,在工作流文件中添加:
jobs:
  build:
    steps:
      # ... 其他步骤:拉代码、安装依赖
      - name: 注入环境变量
        run: echo "PUBLIC_SUPABASE_KEY=${{ secrets.PUBLIC_SUPABASE_KEY }}" >> $GITHUB_ENV
      - name: 构建项目
        run: pnpm run build
  • 这样CI环境中会存在真实的环境变量,SvelteKit在构建时能识别到变量,同时也可以在CI中先执行npm run check(此时环境变量已注入,能正确生成类型)再构建。

方案3:CI构建前直接设置环境变量

部分CI平台支持直接在项目设置中配置环境变量(比如GitHub Secrets、GitLab CI/CD变量等),只需要在CI平台的项目设置里添加PUBLIC_SUPABASE_KEY并填入真实值,SvelteKit在构建时会自动读取这些环境变量,无需额外的文件或脚本处理。

注意事项

  • 所有PUBLIC_前缀的环境变量都会暴露给前端代码,确保这些变量本身就是可以公开的(比如Supabase的公钥确实是安全的前端公开内容)。
  • 不要将真实的.env文件提交到代码仓库,避免敏感信息泄露。

内容的提问来源于stack exchange,提问作者Mike Hogan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:01:20