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

为何process.env.PUBLIC_URL为空时,GET请求仍能正确获取服务器URL?

原因分析

1. process.env.PUBLIC_URL 的作用并非指向服务器API地址

process.env.PUBLIC_URL 是Create React App(CRA)内置的特殊环境变量,仅用于指定应用部署的基础路径,比如当你把应用部署在域名的子路径(如 https://example.com/my-app/)时,这个变量的值会是 /my-app/。如果你的应用部署在域名根路径下,它的默认值就是空字符串,这完全符合预期,和服务器API地址没有任何关联。

2. axios 请求的正确URL来自其他配置

你发起GET请求能拿到正确服务器URL,和 PUBLIC_URL 无关,大概率是以下几种情况:

  • 你在axios配置中手动设置了 baseURL,比如通过另一个自定义环境变量(注意CRA中只有以 REACT_APP_ 开头的变量会被注入客户端代码,比如 REACT_APP_API_URL):
    axios.defaults.baseURL = process.env.REACT_APP_API_URL;
    
  • 请求时直接使用了完整的服务器URL(如 https://your-api-server.com/api/data);
  • 使用了相对路径请求(如 /api/data),此时浏览器会自动拼接当前页面的域名作为完整URL,这也是开发者工具Network标签中能看到正确URL的原因。

3. 服务端与浏览器端打印空值的差异解释

  • 浏览器端:如果应用部署在根路径,PUBLIC_URL 本身就是空字符串,打印结果正常;
  • 服务端:CRA的默认配置主要针对客户端构建,服务端环境(比如SSR场景)如果没有手动传入 PUBLIC_URL 变量,Node.js进程的 process.env 中不会包含这个值,因此打印结果也是空。但axios在服务端可能直接读取了系统环境中的API地址变量(比如未加 REACT_APP_ 前缀的 API_URL,服务端无需前缀即可读取),所以请求依然正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:12:38