[toc]
| 单词 | 词性 | 音标 | 含义 |
|---|---|---|---|
| Vite | n. | /viːt/ | 构建工具,把 Vue / TS 翻译打包并自带开发服务器 |
| proxy | n. | /ˈprɒksi/ | 开发代理,把 /api 请求转发到后端 8080 |
| changeOrigin | v. | /tʃeɪndʒ ˈɒrɪdʒɪn/ | 代理选项,把请求来源伪装成后端自身 |
| env | n. | /ˈenv/ | 环境变量(environment),用于区分 dev / production |
| VITE_ | - | /viːt/ | 只有该前缀的变量才会暴露给前端代码 |
| build | v. | /bɪld/ | 打包,生成 dist/ 下可直接上线的静态文件 |
| dist | n. | /dɪst/ | 打包产物目录(distribution),存放上线文件 |
Lecture19-Vite 配置、环境变量、打包、开发代理
1、本节讲什么
学会改 Vite 的几处常用配置,理解**开发环境(dev)和生产环境(build)**的区别,并用 Vite 的代理解决开发期跨域。
2、概念速览
什么是构建工具(Vite):把你写的源码(Vue/TS)"翻译 + 打包"成浏览器能直接跑的文件,还自带热更新、开发服务器。相当于 Maven 的"编译 + 打包"。
什么是开发代理:开发时前端在 5173、后端在 8080,跨域麻烦。Vite 帮你"转发"——前端请求 /api,Vite 转到后端 8080,从浏览器看就像同源,跨域就绕过了。
正确 vs 误区:代理只在开发期有效;打包上线后没有代理,那时跨域靠后端 CORS(第 20 节)。
3、先看效果
配置代理之前,浏览器禁止非同源异步请求:

配置后,前端请求 http://localhost:5173/api/users 会被 Vite 自动转发到你后端的 http://localhost:8080。开发期用代理,生产期用 CORS(第 20 节)。

4、照着做
① 打开 vite.config.ts,配置代理
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [vue()],
server: {
port: 5173, // 开发端口(改端口就改这)
proxy: {
// 前端请求 /api/xxx 时,转发到后端 http://localhost:8080
'/api': {
target: 'http://localhost:8080',
changeOrigin: true, // 让后端以为请求来自它自己,解决开发期跨域
// 路径重写:匹配到 /api 开头,把 /api 替换为空字符串
rewrite: (path) => path.replace(/^\/api/, '')
},
},
},
})
② 前端请求就写相对路径
// 开发时:走代理,最终打到 http://localhost:8080/api/users
const res = await axios.get('/api/users')
③ 环境变量:区分不同环境的值
- 在前端工程的根目录,新建文件
.env.development(开发用):
VITE_API_BASE=/api
- 在前端工程的根目录,新建文件
.env.production(生产用):
VITE_API_BASE=https://你的域名/api
- 代码里用
import.meta.env.VITE_API_BASE读取:
const http = axios.create({ baseURL: import.meta.env.VITE_API_BASE })
这样开发 / 生产自动用不同地址,不用改代码。
④ 打包
npm run build
执行后会在 dist/ 目录生成"可直接上线"的静态文件(HTML/CSS/JS)。npm run dev 是开发预览,npm run build 是生产产物,两者别混。
5、常见疑问
- Q:代理是什么?为什么能解决跨域? A:跨域是浏览器的规则。代理是让请求先到同源的 Vite 服务器,由它转发给后端——浏览器看到的请求"没跨域",自然不拦。这就是开发期跨域的官方解法。
- Q:
changeOrigin: true一定要写吗? A:通常要。它把请求的来源"伪装"成后端自己,后端才不会拒绝。 - Q:
import.meta.env.VITE_API_BASE里的VITE_前缀是什么? A:只有以VITE_开头的变量才会暴露给前端代码,别的不会。记住这个约定。 - Q:开发好好的,打包后接口连不上了? A:因为代理只在开发期生效,打包后的静态文件没有代理。生产环境要解决跨域,得靠第 28 节的 CORS。
6、规范要点
- 接口地址走环境变量 + baseURL 统一配置,不要在每个组件里写死域名。
- 代理只服务开发期;生产期跨域一律用后端 CORS 解决,别指望前端代理(不生效)。
npm run dev和npm run build命令要分清:开发看 dev,上线看 build 产物。
7、本节验证
- 会在 vite.config.ts 配置 server.port 与 /api 代理 ✅
- 会用 .env.development / .env.production + import.meta.env.VITE_ 区分环境 ✅
- 知道只有 VITE_ 前缀的变量会暴露给前端 ✅
- 会 npm run build 生成 dist/ 产物,并分清 dev 与 build ✅