Vite 代理服務器(Proxy)的配置通常用于開發環境,以解決跨域請求等問題。以下是一個詳細的配置步驟:
通過以上步驟,你就可以在 Vite 項目中配置代理服務器,以便在開發過程中方便地訪問后端服務。
-
?找到 Vite 配置文件?:
- Vite 的配置文件通常為項目根目錄下的?
vite.config.js
?或?vite.config.ts
。如果項目中沒有這個文件,可以手動創建一個。
- Vite 的配置文件通常為項目根目錄下的?
-
?配置代理?:
- 在?
vite.config.js
?或?vite.config.ts
?文件中,通過?export default
?導出一個配置對象,并在該對象中添加?proxy
?屬性。proxy
?屬性是一個對象,用于配置各個代理規則。
- 在?
-
?定義代理規則?:
- 每個代理規則都是一個以目標URL為鍵的對象。該對象可以包含以下屬性:
target
:代理的目標地址,即后端服務的實際地址。changeOrigin
:是否改變源地址。通常設置為?true
,以便代理服務器能夠正確識別請求的來源。rewrite
:重寫規則,用于修改請求的路徑或查詢參數等。headers
:自定義請求頭,用于在代理請求中添加額外的HTTP頭。
- 每個代理規則都是一個以目標URL為鍵的對象。該對象可以包含以下屬性:
-
?示例配置?:
以下是一個簡單的 Vite 代理配置示例:// vite.config.js import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue'// https://vite.dev/config/ export default defineConfig({plugins: [vue()],server: {proxy: {'/api': {target: 'http://localhost:8000', // 后端服務地址changeOrigin: true, // 是否改變源地址rewrite: (path) => path.replace(/^\/api/, '')}}} })
在上面的示例中,所有以?
/api
?開頭的請求都會被代理到?http://localhost:8000
,并且請求路徑中的?/api
?前綴會被移除。 -
重啟 Vite?:npm run dev?
- 配置完成后,需要重啟 Vite 開發服務器,以便使代理配置生效。
-
?使用代理?:
- 在前端代碼中,你可以像訪問本地資源一樣訪問代理的后端服務。例如,如果你配置了代理?
/api
?到?http://localhost:8000
,你可以在前端代碼中通過?fetch('/api/data')
?來訪問?http://localhost:8000/data
。
- 在前端代碼中,你可以像訪問本地資源一樣訪問代理的后端服務。例如,如果你配置了代理?
-
?注意事項?:
- 在設置代理后,建議在開發過程中禁用其他不必要的網絡請求,以減少潛在的安全風險。
- 在生產環境中,通常不會使用代理,而是直接配置后端服務以允許跨域請求,或使用其他安全措施來保護網絡環境。
- 如果以上簡單的 proxy 配置不能滿足您的需求,還可以安裝 http-proxy 中間件
npm install?http-proxy-middleware --save-dev
npm show?http-proxy-middleware
http-proxy-middleware@3.0.3 | MIT | deps: 6 | versions: 88
The one-liner node.js proxy middleware for connect, express, next.js and more
https://github.com/chimurai/http-proxy-middleware#readme - 使用?http-proxy-middleware 示例:
import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import { createProxyMiddleware } from 'http-proxy-middleware'// vite.config.js export default defineConfig({plugins: [vue()],server: {proxy: createProxyMiddleware({context: ['/api', '/auth'],target: 'http://localhost:8000', // 后端服務地址changeOrigin: true // 是否改變源地址})} })
?