为何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
相关产品推荐
相关产品推荐

