vite.config.js
是 Vite 項目的配置文件,用于定義項目的構建、開發服務器、插件等配置選項。以下是示例代碼中各部分的作用分析:
1. 導入模塊
import?{?fileURLToPath,?URL?}?from?'node:url'
import?{?defineConfig?}?from?'vite'
import?vue?from?'@vitejs/plugin-vue'
import?vueDevTools?from?'vite-plugin-vue-devtools'
-
fileURLToPath
和URL
:用于處理文件路徑,將基于 URL 的路徑轉換為本地文件路徑。 -
defineConfig
:從 Vite 中導入的輔助函數,用于定義配置對象,提供更好的類型提示和代碼提示。 -
vue
:從@vitejs/plugin-vue
導入 Vue 插件,用于支持 Vue 文件的解析和處理。 -
vueDevTools
:從vite-plugin-vue-devtools
導入 Vue 開發工具插件,用于在開發過程中提供 Vue 開發工具支持。
2. 配置對象
export?default?defineConfig({plugins:?[vue(), //通過 vue() 插件,項目可以使用 Vue 3 的單文件組件(SFC)vueDevTools(), //通過 vueDevTools() 插件,開發者可以在瀏覽器中使用 Vue 開發工具進行調試。],resolve:?{alias:?{'@':?fileURLToPath(new?URL('./src',?import.meta.url))//使用路徑別名 @,簡化對 src 文件夾下模塊的引用},},
})
-
**
plugins
**:-
vue()
:啟用 Vue 插件,允許項目中使用.vue
文件,并支持 Vue 的單文件組件(SFC)。 -
vueDevTools()
:啟用 Vue 開發工具插件,方便在開發過程中調試 Vue 應用。
-
-
**
resolve
**:alias
:定義路徑別名,用于簡化路徑引用。-
'@'
:將路徑別名@
映射到項目根目錄下的src
文件夾。例如,@/components
實際上指向src/components
。 -
fileURLToPath(new URL('./src', import.meta.url))
:動態計算src
文件夾的絕對路徑,確保路徑的正確性。
-
路徑別名@作用:可以方便引用src文件夾下面的.vue組件
3. vite.config.js
的作用
- 配置開發服務器:
-
定義開發服務器的行為,例如端口號、代理設置等。
-
- 構建配置:
-
定義構建過程中的行為,例如輸出目錄、代碼壓縮等。
-
- 插件管理:
-
加載和配置插件,擴展 Vite 的功能,例如支持 Vue、React 等框架。
-
- 路徑別名:
-
定義路徑別名,簡化模塊路徑引用,提高代碼可讀性。
-
- 環境變量:
-
通過
process.env
或loadEnv
加載和使用環境變量,支持不同環境下的配置。
-
前后端分離項目:
在 vite.config.js
中配置后端服務器通常是為了在開發過程中實現前端與后端的接口代理,解決開發環境下的跨域問題。Vite 提供了 server.proxy
配置項,用于設置代理規則,將前端請求轉發到后端服務器。通過 Vite 的代理功能,解決了開發環境下的跨域問題,并簡化了前端與后端的接口對接。適用于前后端分離的開發模式。
以下是如何在 vite.config.js
中配置后端服務器的示例和說明:
示例代碼
import?{?defineConfig?}?from?'vite'
import?vue?from?'@vitejs/plugin-vue'export?default?defineConfig({plugins:?[vue()],server:?{proxy:?{//?配置代理規則'/api':?{target:?'http://localhost:3000',?//?后端服務器地址changeOrigin:?true,?//?是否啟用跨域rewrite:?(path)?=>?path.replace(/^\/api/,?'')?//?重寫路徑},'/auth':?{target:?'http://localhost:3000',changeOrigin:?true}}}
})
配置說明
1. server.proxy
server.proxy
是 Vite 提供的代理配置項,用于將前端開發服務器的請求轉發到后端服務器。它是一個對象,鍵是前端請求的路徑前綴,值是一個代理配置對象。
2. 代理配置對象
每個代理規則可以包含以下常用配置項:
-
**
target
**:后端服務器的地址。target: 'http://localhost:3000'
這是代理的目標地址,表示后端服務器的 URL。所有匹配 /api 的請求都會被轉發到 http://localhost:3000。 -
**
changeOrigin
**:是否啟用跨域。設置為true
可以避免跨域問題。啟用跨域資源共享(CORS)。當設置為 true 時,代理會修改請求的 Origin 頭,使其與目標服務器的地址一致。這可以避免瀏覽器的跨域限制。 -
**
rewrite
**:可選的路徑重寫函數。用于修改請求路徑,例如去掉路徑前綴。前端請求路徑為 /api/users,經過重寫后,路徑變為 /users。
3. 示例解析
在上述示例中:
-
當前端請求路徑以
/api
開頭時,Vite 會將請求轉發到http://localhost:3000
。 -
'/api':
這是代理規則的鍵,表示前端請求路徑的前綴。當請求路徑以 /api 開頭時,這條代理規則會被觸發。例如:
前端請求 /api/users 會匹配這條規則。
前端請求 /api/posts 也會匹配這條規則。 -
請求路徑會通過
rewrite
函數進行處理,去掉/api
前綴。例如,前端請求/api/users
會被轉發到http://localhost:3000/users
。后端服務器的接口路徑是 /users 和 /posts,而不是 /api/users 和 /api/posts。如果不進行路徑重寫,轉發后的請求路徑將是 http://localhost:3000/api/users,這顯然不符合后端的接口路徑設計。通過路徑重寫,可以確保請求路徑與后端接口一致。 -
如果后端接口路徑本身包含
/api
前綴(例如http://localhost:3000/api/users
),則不需要路徑重寫。 -
/auth
路徑的請求同樣會被轉發到http://localhost:3000
,但沒有路徑重寫。
配置后端服務器的其他注意事項
1. 支持 HTTPS
如果后端服務器使用 HTTPS,需要在 target
中指定完整的 HTTPS 地址,并可能需要配置 secure
屬性:
'/api':?{target:?'https://example.com',secure:?false,?//?如果后端證書不是由受信任的?CA?簽發,可以設置為?falsechangeOrigin:?true
}
2. WebSocket 代理
如果需要代理 WebSocket 請求,可以添加 ws: true 選項。
如果后端服務器使用 WebSocket,可以通過 ws
屬性啟用 WebSocket 代理:
'/ws':?{target:?'ws://localhost:3000',ws:?true,?//?啟用?WebSocket?代理changeOrigin:?true
}
3. 多個后端服務
如果項目需要代理到多個后端服務,可以定義多個代理規則:
server:?{proxy:?{'/api':?{target:?'http://localhost:3000',changeOrigin:?true},'/admin':?{target:?'http://localhost:4000',changeOrigin:?true}}
}
4. 環境變量
代理配置也可以通過環境變量動態設置,例如:
import?{?defineConfig,?loadEnv?}?from?'vite'export?default?defineConfig(({?mode?})?=>?{const?env?=?loadEnv(mode,?process.cwd(),?'')return?{server:?{proxy:?{'/api':?{target:?env.VITE_BACKEND_URL?||?'http://localhost:3000',changeOrigin:?true}}}}
})
在 .env
文件中可以設置:
VITE_BACKEND_URL=http://localhost:3000