Vite 的工作流程

Vite 的工作流程基于其創新的 “預構建 + 按需加載” 機制,通過利用現代瀏覽器對原生 ES 模塊的支持,顯著提升了開發效率和構建速度。以下是其核心工作流程的詳細分析:


一、開發環境工作流程

1. 啟動開發服務器

  • 冷啟動:通過 npm run dev 命令啟動本地開發服務器,Vite 會快速初始化并啟動一個基于 Koa 的服務器,無需打包所有模塊,因此啟動速度極快。
  • 預構建依賴:首次啟動時,Vite 會對 node_modules 中的第三方依賴進行預構建(使用 esbuild),將 CommonJS 模塊轉換為 ESM 格式,并合并多個小文件以減少 HTTP 請求。預構建結果緩存到 node_modules/.vite 目錄,后續啟動直接復用。

2. 按需編譯與請求攔截

  • 入口解析:瀏覽器請求入口文件(如 index.html)時,Vite 解析 HTML 中的 <script type="module">,識別入口模塊(如 main.js)。
  • 動態編譯:當瀏覽器請求某個模塊(如 .vue.ts 文件)時,Vite 攔截請求并根據文件類型實時編譯:
    • JavaScript/TypeScript:使用 esbuild 快速轉換為瀏覽器兼容的 ESM 代碼。
    • Vue/Svelte 單文件組件:通過插件(如 @vitejs/plugin-vue)拆解模板、樣式和邏輯,分別編譯為 JavaScript 和 CSS。
    • 靜態資源:CSS、圖片等文件通過特定插件處理(如添加哈希名或轉換為 Base64)。

3. 熱模塊替換(HMR)

  • 實時更新:修改文件后,Vite 僅重新編譯變更的模塊,并通過 WebSocket 通知瀏覽器更新,無需刷新頁面。例如,修改 Vue 組件時,僅替換該組件的代碼,保留應用狀態。
  • 優化策略:HMR 邊界自動推斷,避免 Webpack 中全量更新的性能問題。

二、生產環境工作流程

1. Rollup 打包

  • 代碼優化:通過 npm run build 觸發 Rollup 打包,進行 Tree Shaking、代碼壓縮(Terser)和代碼分割,生成優化的靜態文件(輸出至 dist 目錄)。
  • 靜態資源處理:CSS 提取為獨立文件,圖片等資源根據配置選擇內聯或外部引用。

2. 預構建緩存復用

  • 依賴復用:生產構建時復用開發環境預構建的依賴緩存,減少重復編譯時間。

三、核心機制解析

1. 原生 ESM 支持

  • 瀏覽器直接加載 ESM 模塊,Vite 僅作為中間層處理模塊請求,實現真正的按需加載。

2. 插件系統

  • 擴展能力:通過插件(如 vite-plugin-pwa)支持 PWA、SSR 等場景。插件可攔截請求、修改編譯結果或擴展配置。
  • 常用插件示例
    // vite.config.js
    import vue from '@vitejs/plugin-vue';
    import legacy from '@vitejs/plugin-legacy';export default defineConfig({plugins: [vue(),legacy({ targets: ['defaults'] }) // 兼容舊瀏覽器]
    });
    

3. 配置靈活性

  • 別名與路徑解析:支持自定義別名(如 @ 指向 src 目錄)和擴展名自動補全。
  • 代理與服務器配置:開發服務器支持 HTTPS、端口設置和 API 請求代理。
    // vite.config.js
    export default defineConfig({server: {port: 3000,proxy: {'/api': { target: 'http://localhost:8000', changeOrigin: true }}}
    });
    

四、Vite 與 Webpack 的對比

特性ViteWebpack
啟動速度毫秒級(按需編譯)慢(全量打包)
HMR 效率僅更新變更模塊需重新打包依賴鏈
生產構建Rollup(輕量高效)自建打包(功能全面但較重)
生態兼容性快速成長,支持主流框架成熟,插件豐富

五、適用場景與局限性

  • 適用場景:現代瀏覽器項目、需要快速迭代的 SPA、基于 Vue/React 的應用。
  • 局限性
    • 對舊版瀏覽器支持需額外插件(如 @vitejs/plugin-legacy)。
    • 生產環境仍需 Rollup 打包,復雜場景需手動優化。

通過上述流程,Vite 實現了開發效率與生產性能的平衡,成為現代前端工具鏈中的重要選擇。如需深入配置或優化,可參考 Vite 官方文檔。

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

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

相關文章

線性DP(動態規劃)

線性DP的概念&#xff08;視頻&#xff09; 學習線性DP之前&#xff0c;請確保已經對遞推有所了解。 一、概念 1、動態規劃 不要去看網上的各種概念&#xff0c;什么無后效性&#xff0c;什么空間換時間&#xff0c;會越看越暈。從做題的角度去理解就好了&#xff0c;動態規劃…

MySQL中sql_mode的設置

■ 57版本原來配置 show variables like %sql_mode%; STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION ■ 修改配置文件 注釋掉sql_mode&#xff0c;并重啟&#xff0c;查看57版本的默認設置 ONL…

MCAL學習(1)——AutoSAR

1.了解AutoSAR及一些概念 AutoSAR是Automotive Open System Architecture ,汽車開放系統架構。 針對汽車ECU的軟件開發架構。已經是汽車電子軟件開發的標準。 OS服務&#xff1a;Freertos 整車廠&#xff08;OEM&#xff09;主要負責應用層算法 一級供應商&#xff1a;生產制…

Vue報錯:Cannot read properties of null (reading ‘xxx‘)

一、報錯問題 Cannot read properties of null (reading style)at patchStyle (runtime-dom.esm-bundler.js:104:22)二、錯誤排查 這類報錯一般是在已經開發好后&#xff0c;后面測試時突然發現的&#xff0c;所以不好排查錯誤原因。 三、可能原因及解決方案 v-if 導致 在 …

25G 80km雙纖BIDI光模塊:遠距傳輸的創新標桿

目錄 一、產品優勢&#xff1a;雙纖與BIDI的獨特價值 易天光通信25G SFP28 ZR 80KM 易天光通信25G SFP28 BIDI ZR 80KM 二、權威認證與技術突破 三、雙纖與BIDI的核心差異解析 四、應用場景&#xff1a;驅動多領域高效互聯 總結 在5G、云計算與數字化轉型的推動下&#xff0c;光…

2025-05-06 學習記錄--Python-注釋 + 打印變量 + input輸入

合抱之木&#xff0c;生于毫末&#xff1b;九層之臺&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、注釋 ?? &#xff08;一&#xff09;、塊注釋 &#x1f36d; 舉例&#xff1a; &#x1f330; # 打印數字 print(2025) …

基于mediapipe深度學習的眨眼檢測和計數系統python源碼

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 5.算法完整程序工程 1.算法運行效果圖預覽 (完整程序運行后無水印) 2.算法運行軟件版本 人工智能算法python程序運行環境安裝步驟整理_本地ai 運行 python-CSDN博客 3.部分核心程序 &…

怎樣通過API 實現python調用Chatgpt,gemini

怎樣通過API 實現python調用Chatgpt,gemini 以下為你詳細介紹如何設置和調用這些參數,以創建一個類似的 ChatCompletion 請求: 1. 安裝依賴庫 如果你使用的是 OpenAI 的 API 客戶端,需要先安裝 openai 庫。可以使用以下命令進行安裝: pip install openai2. 代碼示例 …

Linux 下MySql主從數據庫的環境搭建

測試環境&#xff1a;兩臺服務器&#xff0c;Mysql版本 8.0&#xff0c;linux版本&#xff1a;Ubuntu 20.04.3&#xff1b; 1.在兩臺服務器上安裝MySql&#xff1b; 2.選一臺作為主服務器&#xff0c;在主服務器上以root用戶進入Mysql&#xff0c;執行以下語句&#xff1a; …

力扣1812題解

記錄 2025.5.7 題目&#xff1a; 思路&#xff1a; 從左下角開始&#xff0c;棋盤的行數和列數&#xff08;均從 1 開始計數&#xff09;之和如果為奇數&#xff0c;則為白色格子&#xff0c;如果和為偶數&#xff0c;則為黑色格子。 代碼&#xff1a; class Solution {pu…

適合java程序員的Kafka消息中間件實戰

創作的初心&#xff1a; 我們在學習kafka時&#xff0c;都是基于大數據的開發而進行的講解&#xff0c;這篇文章為java程序員為核心&#xff0c;助力大家掌握kafka實現。 什么是kafka: 歷史&#xff1a; 誕生與開源&#xff08;2010 - 2011 年&#xff09; 2010 年&#xf…

PDF智能解析與知識挖掘:基于pdfminer.six的全棧實現

前言 在數字化信息爆炸的時代&#xff0c;PDF&#xff08;便攜式文檔格式&#xff09;作為一種通用的電子文檔標準&#xff0c;承載著海量的結構化與非結構化知識。然而&#xff0c;PDF格式的設計初衷是用于展示而非數據提取&#xff0c;這使得從PDF中挖掘有價值的信息成為數據…

Python爬蟲+代理IP+Header偽裝:高效采集亞馬遜數據

1. 引言 在當今大數據時代&#xff0c;電商平臺&#xff08;如亞馬遜&#xff09;的數據采集對于市場分析、競品監控和價格追蹤至關重要。然而&#xff0c;亞馬遜具有嚴格的反爬蟲機制&#xff0c;包括IP封禁、Header檢測、驗證碼挑戰等。 為了高效且穩定地采集亞馬遜數據&am…

架構思維:探討架構師的本質使命

文章目錄 軟件工程1. 軟件工程的定義與核心目標2. 軟件工程 vs. 軟件項目管理3. 軟件工程的兩大特性4. 軟件工程的關鍵活動與方法論5. 架構師在軟件工程中的職責架構師的職責和思維架構師心性修煉三大核心能力架構設計的基本準則 團隊共識“設計文檔”的統一結構框架閱讀他人代…

QT設計權限管理系統

Qt能夠簡單實現系統的權限設計 首先我們需要一個登陸界面 例如這樣 然后一級權限&#xff0c;可以看到所有的內容&#xff0c;不設置菜單欄的隱藏。 然后其他權限&#xff0c;根據登陸者的身份進行菜單欄不同的展示。 菜單欄的隱藏代碼如下&#xff1a; ui->actionuser-…

Debezium 架構詳解與實戰示例

Debezium 架構詳解與實戰示例 1. 整體架構圖 #mermaid-svg-tkAquOxA2pylXzON {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-tkAquOxA2pylXzON .error-icon{fill:#552222;}#mermaid-svg-tkAquOxA2pylXzON .error-t…

Qt天氣預報系統更新UI界面

Qt天氣預報系統更新UI界面 1、創建各個小部分列表2、定義一個更新UI函數2.1 實現更新UI界面函數 1、創建各個小部分列表 QList<QLabel *> weekList; //星期 QList<QLabel *> dateList; //日期QList<QLabel *> weatherL…

AWS MCP Servers

文章目錄 一、關于 AWS MCP Servers什么是模型上下文協議&#xff08;MCP&#xff09;以及它是如何與AWS MCP服務器協同工作的&#xff1f;為什么選擇MCP服務器&#xff1f; 二、可用 Servers核心MCP服務器AWS 文檔服務器亞馬遜 Bedrock 知識庫檢索 MCP 服務器AWS CDK MCP 服務…

python如何把pdf轉word

在Python中將PDF轉換為Word文檔&#xff08;.docx&#xff09;比反向轉換&#xff08;Word轉PDF&#xff09;更具挑戰性&#xff0c;因為PDF是固定格式&#xff0c;而Word是可編輯格式。以下是幾種可行的方法及詳細步驟&#xff1a; 方法1&#xff1a;使用 pdf2docx 庫 pdf2do…

NLP 和大模型技術路線

transformers快速入門 NLP 和大模型技術路線 在自然語言處理&#xff08;NLP&#xff09;和大模型領域&#xff0c;技術路線的學習應該從基礎開始&#xff0c;逐步深入到更高階的應用和優化技術。本文將詳細介紹相關技術點的學習順序&#xff0c;以及每個技術點的關鍵學習內容…