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

SvelteKit中$env/dynamic/public在Vercel页面组件中失效求助

为什么$env/dynamic/public在Vercel的SvelteKit页面组件中直接使用会失效?

核心原因:静态渲染与运行时环境变量的冲突

你遇到的问题本质是Vercel默认的静态站点生成(SSG)模式和$env/dynamic/public的设计逻辑不匹配:

  1. $env/dynamic/public的运行时依赖
    $env/dynamic/public的作用是在代码运行时动态读取环境变量,它不会在构建阶段把变量值硬编码到产物中。但Vercel的静态渲染会把页面预编译成纯静态文件,客户端浏览器中没有Node.js运行时环境,也无法访问Vercel的服务器端环境变量,自然读取不到dynamic/public指向的变量,最终返回undefined。

  2. 客户端组件的环境限制
    +page.svelte在静态渲染模式下会被编译为客户端执行的代码,而浏览器环境不存在process.env这类Node.js环境变量载体,$env/dynamic/public在客户端没有可读取的变量来源。而+page.server.ts运行在Vercel的Node.js服务器环境中,能正常获取运行时环境变量,再通过load函数把变量值传递给客户端组件,因此可以正常工作。

  3. 静态与动态环境变量的差异
    如果改用$env/static/public,Vercel会在构建阶段直接把环境变量值替换到代码中,静态渲染的页面就能正常拿到变量值。但这种方式的变量值会被硬编码到构建产物,后续修改环境变量需要重新部署;而你用+page.server.ts中转的方案,既保留了运行时读取变量的灵活性,又避开了客户端环境的限制,是更合理的动态变量使用方式。

内容的提问来源于stack exchange,提问作者Shin Hyunjae

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:09:51