Vite+SvelteKit:如何在服务端安全访问私有环境变量?
服务端私有环境变量访问问题(SvelteKit)
问题场景
- 正在制作POC,使用
src/lib/db.ts文件,代码如下:
console.log(import.meta.env.MONGO_URI, import.meta.env.SSR);
执行后输出:
undefined true
.env文件中已定义MONGO_URI,使用VITE_MONGO_URI可以查看变量值,但不想将该变量暴露给客户端;经检查db.ts未被打包到客户端,且import.meta.env.SSR为true,说明打包工具识别这是服务端代码。- 核心问题:如何在服务端安全访问私有环境变量?
解决方案
SvelteKit提供了专门的环境变量配置机制,可精准区分服务端私有变量与客户端可访问变量:
- 配置
.env文件:在项目根目录的.env中直接定义私有变量(无需添加VITE_前缀):
MONGO_URI=你的MongoDB连接地址
- 修改SvelteKit配置文件:在
svelte.config.js中配置kit.env,指定服务端可访问的私有变量列表:
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; export default { preprocess: vitePreprocess(), kit: { env: { // 列出仅服务端可访问的私有环境变量 private: ['MONGO_URI'], // 若有需要暴露给客户端的变量,需添加VITE_前缀并放入public数组 public: [] } } };
- 在服务端代码中访问变量:
在src/lib/db.ts这类服务端专属代码中,直接通过import.meta.env.MONGO_URI即可获取变量值,该变量不会被打包到客户端代码中,确保安全性。
注意:需保证db.ts仅在服务端逻辑中被引用(比如在+server.ts、+page.server.ts中导入),避免被客户端代码意外引用导致变量暴露。
内容的提问来源于stack exchange,提问作者eddow
相关产品推荐
相关产品推荐

