vite.config.js 是Vite 項目的配置文件,分析具體用法

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'
  • fileURLToPathURL:用于處理文件路徑,將基于 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.envloadEnv 加載和使用環境變量,支持不同環境下的配置。

前后端分離項目:

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71681.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71681.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71681.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

行為模式---責任鏈模式

概念 責任鏈模式是一種行為設置模式,它的核心思想就是將請求的發送者和接收者進行解耦,每個接收者都可以處理請求。 在責任鏈模式中將每個接收者連成一個鏈條,當有請求發送上來的時候會經過每一個接收者。直到消息被處理。 適用場景 1、當…

pytest結合allure

Allure 一、文檔二、指令三、裝飾器3.1 allure.step裝飾器3.2 allure.description裝飾器3.3 allure.title裝飾器3.4 allure.link、allure.issue 和 allure.testcase裝飾器3.5 allure.epic、allure.feature 和 allure.story裝飾器3.6 allure.severity裝飾器 一、文檔 allure文檔…

前端知識點---http.createHttp()的理解(arkts)

通俗易懂的例子:點外賣 🍔🥤 想象一下,你在家里點外賣,HTTP 請求就像是你和餐廳之間的溝通方式。 1?? 沒有 http.createHttp():每次點餐都重新撥電話 📞 如果你每次點餐都重新撥打餐廳的電話…

大模型開發(五):P-Tuning項目——新零售決策評價系統(下)

P-Tuning項目——新零售決策評價系統(下) 0 前言1 P-Tuning原理2 數據處理 0 前言 上篇文章我們介紹了使用PET方式微調BERT模型,PET屬于提示詞微調的一種,另一種比較常見的提示詞微調是P-Tuning,我們今天在相同的項目…

分布式中間件:Redis介紹

目錄 Redis 概述 Redis 的特點 高性能 豐富的數據結構 持久化 分布式特性 簡單易用 Redis 的數據結構 字符串(String) 哈希(Hash) 列表(List) 集合(Set) 有序集合&…

在昇騰GPU上部署DeepSeek大模型與OpenWebUI:從零到生產的完整指南

引言 隨著國產AI芯片的快速發展,昇騰(Ascend)系列GPU憑借其高性能和兼容性,逐漸成為大模型部署的重要選擇。本文將以昇騰300i為例,手把手教你如何部署DeepSeek大模型,并搭配OpenWebUI構建交互式界面。無論…

系統思考—組織診斷

“未經過診斷的行動是盲目的。” — 托馬斯愛迪生 最近和一家教育培訓機構溝通時,發現他們面臨一個有意思的問題:每年招生都挺不錯,但教師的整體績效一直提升緩慢,導致師生之間存在長期的不匹配。管理層試了很多辦法,…

AI大模型學習(五): LangChain(四)

Langchian讀取數據庫 案例:在數據庫中表格數據上的問題系統的基本方法,將涵蓋使用鏈和代理的視線,通過查詢數據庫中的數據并得到自然語言的答案,兩者之間的主要區別在于,我們代理可以根據多次循環查詢數據庫以回答問題 實現思路: 1.將問題轉換成DSL查詢,模型將用…

人工智能與深度學習的應用案例:從技術原理到實踐創新

第一章 引言 人工智能(AI)作為21世紀最具變革性的技術之一,正通過深度學習(Deep Learning)等核心技術推動各行業的智能化進程。從計算機視覺到自然語言處理,從醫療診斷到工業制造,深度學習通過模擬人腦神經網絡的層次化學習機制,實現了對復雜數據的高效分析與決策。本…

支持向量機的深度解析:從理論到C++實現

支持向量機(SVM)是一種強大的監督學習算法,廣泛應用于分類和回歸任務。本文詳細探討了SVM的理論基礎,包括最大間隔分離超平面、軟間隔和核技巧(Kernel Trick)的數學原理,并通過LaTeX公式推導其優化目標。接著,我們用C++實現了一個簡單的線性SVM,包括梯度下降優化求解支…

企業如何選擇研發項目進度管理軟件?盤點15款實用工具

這篇文章介紹了以下工具: 1. PingCode; 2. Worktile; 3. 騰訊 TAPD; 4. 華為 DevCloud; 5. 億方云; 6. 阿里云效; 7. CODING 碼云; 8. 明道云; 9. 進度貓; 10. 輕流等。 …

c++: 容器vector

文章目錄 介紹initializer_list與string的不同底層總代碼 介紹 C 中的 vector 是一種序列容器,它允許你在運行時動態地插入和刪除元素。 vector 是基于數組的數據結構,但它可以自動管理內存,這意味著你不需要手動分配和釋放內存。 與 C 數組相…

Qt常用控件之表格QTableWidget

表格QTableWidget QTableWidget 是一個表格控件,行和列交匯形成的每個單元格,是一個 QTableWidgetItem 對象。 1. QTableWidget屬性 QTableWidget 的屬性只有兩個: 屬性說明rowCount當前行的個數。columnCount當前列的個數。 2. QTableW…

Golang學習筆記_47——訪問者模式

Golang學習筆記_44——命令模式 Golang學習筆記_45——備忘錄模式 Golang學習筆記_46——狀態模式 文章目錄 一、核心概念1. 定義2. 解決的問題3. 核心角色4. 類圖 二、特點分析三、適用場景1. 編譯器實現2. 財務系統3. UI組件系統 四、Go語言實現示例完整實現代碼執行結果 五、…

棧概念和結構

文章目錄 1. 棧的概念2. 棧的分類3. 棧的實現(數組棧)3.1 接口設計(Stack.h)3.2 接口實現(Stack.c)1)初始化銷毀2)棧頂插入刪除3)棧頂元素、空棧、大小 3.3 完整代碼Stac…

GitCode 助力 vue3-element-admin:開啟中后臺管理前端開發新征程

源碼倉庫: https://gitcode.com/youlai/vue3-element-admin 后端倉庫: https://gitcode.com/youlai/youlai-boot 開源助力,開啟中后臺快速開發之旅 vue3-element-admin 是一款精心打造的免費開源中后臺管理前端模板,它緊密貼合…

算法.習題篇

算法 — 地大復試 模擬 while循環和MOD循環計數 1.約瑟夫問題 http://bailian.openjudge.cn/practice/3254 using namespace std;bool isNoPeople(vector<bool> c)//判斷當前數組是否一個小孩都沒有了 {bool nopeople true;for (bool ival : c){if ( ival true)nop…

大白話JavaScript實現一個函數,將字符串中的每個單詞首字母大寫。

大白話JavaScript實現一個函數&#xff0c;將字符串中的每個單詞首字母大寫。 答題思路 理解需求&#xff1a;要寫一個函數&#xff0c;它能接收一個字符串&#xff0c;然后把這個字符串里每個單詞的第一個字母變成大寫。分解步驟 拆分單詞&#xff1a;一般單詞之間是用空格隔…

react中如何使用使用react-redux進行數據管理

以上就是react-redux的使用過程&#xff0c;下面我們開始優化部分&#xff1a;當一個組件只有一個render生命周期&#xff0c;那么我們可以改寫成一個無狀態組件&#xff08;UI組件到無狀態組件&#xff0c;性能提升更好&#xff09;

廣告營銷,會被AI重構嗎?

DeepSeek設計&#xff0c;即夢AI繪圖&#xff0c;剪映成片。 DeepSeek的熱度還在高開瘋走。 用戶對于各個場景下DS應用的探索也還在持續&#xff0c;各種DS的模式被挖掘出來&#xff0c;超級個體們開始給手下的大模型團隊進行分工&#xff0c;實踐出各種場景下最佳的排列組合方…