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运行环境里存在,绝对不会被传到浏览器,更不会公开。
三、客户端怎么读取环境变量?
客户端代码(浏览器里跑的部分)只能通过两种方式获取环境变量:
- 读取带
PUBLIC_前缀的变量:直接用import.meta.env.PUBLIC_XXX,比如:console.log(import.meta.env.PUBLIC_API_BASE_URL); - 通过服务端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
相关产品推荐
相关产品推荐

