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

Vite项目部署Vercel/Netlify时代理环境变量失效求助

问题描述

本地通过npm run dev运行Vite项目时,使用代理访问后端API正常,但部署到Vercel或Netlify生产环境后,axios请求/api/users报错。前端代码中console.log(import.meta.env.VITE_URL)能正常打印后端端点,说明环境变量已正确加载,但代理规则未生效。

vite.config.js 代码:

export default ({ mode }) => {
   // Load environment variables based on the mode/
   const env = loadEnv(mode, process.cwd(), '');

   return defineConfig({
     server: {
       proxy: {
         '/api': {
           target: env.VITE_URL,
           changeOrigin: true,
           rewrite: (path) => path.replace(/^\/api/, '')
         }
       }
     },
     plugins: [react()]
   })
 };

App.jsx 代码:

import axios from 'axios'

function App() {

  const fetchdata = async() => {
    try {
      console.log(import.meta.env.VITE_URL);           // working well on deployment;
      
      const res = await axios.get("/api/users");       // throwing error on deployment
      console.log(res)

    } catch (error) {
      console.log(error)
    }
  }
  fetchdata();

  return (
    <>
       <h1>Hello world</h1>
    </>
  )
}

export default App
解决方案

核心原因

Vite的server.proxy配置仅在开发环境(npm run dev)生效,生产部署后项目是静态资源,没有Vite开发服务器处理代理转发,因此/api路径无法被转发到后端地址。

解决办法

方法1:前端直接请求完整后端地址

修改axios请求,去掉/api前缀,直接用环境变量中的后端地址拼接接口路径:

const res = await axios.get(`${import.meta.env.VITE_URL}/users`);

注意:需要确保后端服务配置了CORS跨域允许,允许部署平台的域名访问。

方法2:在部署平台配置重写/代理规则(推荐)

让Vercel或Netlify处理/api路径的转发,保持前端代码不变:

Vercel 配置

在项目根目录创建vercel.json文件:

{
  "rewrites": [
    {
      "source": "/api/(.*)",
      "destination": "${VITE_URL}/$1"
    }
  ]
}

然后在Vercel控制台的项目环境变量中配置VITE_URL,值为你的后端服务端点。

Netlify 配置

在项目根目录创建netlify.toml文件:

[[redirects]]
  from = "/api/*"
  to = "${VITE_URL}/:splat"
  status = 200
  force = true

同样在Netlify控制台的项目环境变量中配置VITE_URL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:41:22