Vercel Preview环境dev分支环境变量部署后读取为空怎么办
问题根因
核心原因是主流前端框架对浏览器端可访问的环境变量有强制命名前缀要求,Vercel的构建流程会遵循框架的这一规则,不会把不带指定前缀的环境变量注入到客户端侧的process.env对象中:
- Next.js 框架:仅前缀为
NEXT_PUBLIC_的环境变量会被打包注入客户端代码,无前缀变量仅在服务端逻辑、构建脚本中可读取 - Vite 框架:仅前缀为
VITE_的环境变量会暴露给客户端代码 - Create React App 框架:仅前缀为
REACT_APP_的环境变量会暴露给客户端代码
你当前直接读取process.env.BACKEND_URL,变量名不符合对应框架的前缀要求,哪怕在Vercel面板配置了正确的环境和分支范围,构建时也不会把该值打包进客户端运行的JS资源中,因此读取结果为空。
另外存在一个次要排查点:Vercel环境变量修改后不会自动同步到已完成的部署版本,若配置完变量后没有手动触发重新部署,新的变量值也不会生效。
修复方案
- 根据你项目使用的框架,修改Vercel面板中对应环境变量的名称:
- Next.js 项目改为
NEXT_PUBLIC_BACKEND_URL - Vite 项目改为
VITE_BACKEND_URL - Create React App 项目改为
REACT_APP_BACKEND_URL
- Next.js 项目改为
- 同步修改代码中读取环境变量的逻辑,对应读取修改后的带前缀变量,以Next.js为例,校验代码需要调整为:
<Text>Backend URL: {process.env.NEXT_PUBLIC_BACKEND_URL}</Text> - 确认环境变量的生效范围勾选正确:覆盖Preview环境、关联dev分支,不要遗漏对应部署的适用场景。
- 手动触发dev分支对应Preview部署的重新构建,等待新部署完成后再校验变量取值即可。
补充说明:如果使用Next.js App Router的服务端组件,可以直接读取不带
NEXT_PUBLIC_前缀的环境变量,但只要是运行在浏览器侧的客户端组件代码,就必须使用带指定前缀的变量名。
内容的提问来源于stack exchange,提问作者ablaszkiewicz1
相关产品推荐
相关产品推荐

