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

SvelteKit环境变量是否会公开?外部目录代码安全性咨询

SvelteKit环境变量公开规则及相关问题解答

一、环境变量何时会被公开?

在SvelteKit里,环境变量的公开逻辑很明确:

  • 前缀为PUBLIC_的变量:不管在客户端还是服务端代码里使用,都会被打包进前端代码,直接暴露给浏览器,所有人都能看到。
  • 不带PUBLIC_的私有变量:只有在服务端专属代码(比如+server.js、+page.server.js,或者src/lib/server/下的文件)里用才安全。要是不小心在客户端代码(比如+page.svelte、src/lib/下非server目录的文件)里引用私有变量,SvelteKit会直接报错拦截打包,避免泄露。

二、src目录外的文件夹属于“客户端”吗?环境变量会被公开吗?

完全不属于。SvelteKit的构建流程只会处理src/目录和根目录下的配置文件(比如svelte.config.js),src之外的文件夹根本不会被打包进前端网站代码。

你提到的这些文件夹是供学生用node test/main.js直接运行的Node.js脚本,和前端网站的构建、运行完全是两个独立的环境。只要你在这些脚本里通过process.env读取环境变量,变量只会在Node.js运行环境里存在,绝对不会被传到浏览器,更不会公开。

三、客户端怎么读取环境变量?

客户端代码(浏览器里跑的部分)只能通过两种方式获取环境变量:

  1. 读取带PUBLIC_前缀的变量:直接用import.meta.env.PUBLIC_XXX,比如:
    console.log(import.meta.env.PUBLIC_API_BASE_URL);
    
  2. 通过服务端API传递:如果要给客户端传私有变量的内容(注意是内容,不是变量本身),得在服务端路由里处理,客户端通过请求获取,比如:
    // 服务端路由 +server.js
    export async function GET() {
      const privateValue = process.env.SECRET_TOKEN;
      return new Response(JSON.stringify({ value: privateValue }), {
        headers: { 'Content-Type': 'application/json' }
      });
    }
    
    // 客户端 +page.svelte
    const response = await fetch('/api/get-value');
    const data = await response.json();
    console.log(data.value);
    
    这种方式下,私有变量不会直接暴露,只有你主动返回的内容会到客户端。

内容的提问来源于stack exchange,提问作者Jacob Tucker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:21:11