Vite 完整功能詳解與 Vue 項目實戰指南

Vite 完整功能詳解與 Vue 項目實戰指南

Vite 是下一代前端開發工具,由 Vue 作者尤雨溪開發,提供極速的開發體驗和高效的生產構建。以下是完整功能解析和實戰示例:


一、Vite 核心功能亮點

  1. 閃電般冷啟動

    • 基于原生 ES 模塊(ESM)按需編譯
    • 啟動時間與項目大小無關
  2. 即時熱更新(HMR)

    • 毫秒級更新,保留應用狀態
    • 支持 Vue/JSX/CSS 的 HMR
  3. 開箱即用支持

    • TypeScript
    • JSX/TSX
    • CSS 預處理器(Sass/Less/Stylus)
    • PostCSS
    • Web Assembly
  4. 優化構建

    • 生產環境使用 Rollup 打包
    • 自動代碼分割
    • 異步 chunk 優化
  5. 插件系統

    • 兼容 Rollup 插件生態
    • 官方插件:@vitejs/plugin-vue、@vitejs/plugin-react 等

二、完整 Vue 項目實戰示例

項目結構
my-vue-app/
├── public/
│   └── favicon.ico
├── src/
│   ├── assets/
│   ├── components/
│   ├── store/       # Pinia 狀態管理
│   ├── router/      # Vue Router
│   ├── views/
│   ├── App.vue
│   ├── main.js
│   └── style.css
├── .env             # 環境變量
├── vite.config.js   # Vite 配置
└── package.json
1. 創建項目
npm create vite@latest
# 選擇 Vue + TypeScript
cd my-vue-app
npm install
2. 配置 vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'export default defineConfig({plugins: [vue()],resolve: {alias: {'@': path.resolve(__dirname, './src')}},server: {port: 8080,proxy: {'/api': {target: 'http://localhost:3000',changeOrigin: true,rewrite: path => path.replace(/^\/api/, '')}}},css: {preprocessorOptions: {scss: {additionalData: `@import "@/styles/variables.scss";`}}},build: {rollupOptions: {output: {manualChunks(id) {if (id.includes('node_modules')) {return 'vendor'}}}}}
})
3. 集成 Vue Router
npm install vue-router@4
// src/router/index.js
import { createRouter, createWebHistory } from 'vue-router'
import Home from '@/views/Home.vue'const routes = [{ path: '/', component: Home },{ path: '/user/:id', component: () => import('@/views/User.vue'),meta: { requiresAuth: true }}
]const router = createRouter({history: createWebHistory(),routes
})export default router
4. 集成 Pinia 狀態管理
npm install pinia
// src/store/user.js
import { defineStore } from 'pinia'export const useUserStore = defineStore('user', {state: () => ({name: 'Guest',isAdmin: false}),actions: {login(userData) {this.name = userData.namethis.isAdmin = userData.isAdmin}},getters: {welcomeMessage: (state) => `Hello, ${state.name}!`}
})
5. 組件示例 (帶 TypeScript)
<!-- src/components/UserCard.vue -->
<script setup lang="ts">
import { computed } from 'vue'
import { useUserStore } from '@/store/user'const userStore = useUserStore()
const welcomeMsg = computed(() => userStore.welcomeMessage)defineProps<{userId: numbershowDetails: boolean
}>()
</script><template><div class="user-card"><h3>{{ welcomeMsg }}</h3><slot name="header" /><div v-if="showDetails"><!-- 用戶詳情 --></div></div>
</template><style scoped>
.user-card {border: 1px solid #eee;padding: 1rem;border-radius: 8px;
}
</style>
6. 環境變量配置
# .env.development
VITE_API_BASE=http://localhost:3000/api
VITE_DEBUG_MODE=true# .env.production
VITE_API_BASE=https://api.example.com
// 使用環境變量
const apiBase = import.meta.env.VITE_API_BASE
7. 性能優化技巧
  1. 動態導入組件
const UserProfile = defineAsyncComponent(() =>import('@/components/UserProfile.vue')
)
  1. 圖片資源處理
<!-- 自動轉換小圖片為 base64 -->
<img src="@/assets/logo.png" alt="Vite logo"><!-- 使用 ?url 獲取資源 URL -->
import largeImage from '@/assets/bg.jpg?url'
  1. 全局樣式管理
// src/styles/main.scss
@mixin flex-center {display: flex;justify-content: center;align-items: center;
}// vite.config.js 中全局引入
8. 高級功能實現

SSR 支持 (vite-plugin-ssr)

npm install vite-plugin-ssr
// vite.config.js
import ssr from 'vite-plugin-ssr/plugin'export default defineConfig({plugins: [vue(), ssr()]
})

PWA 支持

npm install vite-plugin-pwa
import { VitePWA } from 'vite-plugin-pwa'export default defineConfig({plugins: [VitePWA({registerType: 'autoUpdate',manifest: {name: 'My Vue App',short_name: 'VueApp',theme_color: '#ffffff'}})]
})
9. 調試與測試
// package.json
"scripts": {"dev": "vite","build": "vite build","preview": "vite preview","test": "vitest","coverage": "vitest run --coverage"
}
10. 部署配置
// 靜態部署 (GitHub Pages)
build: {outDir: 'docs',assetsDir: 'static'
}// SPA 路由處理
export default defineConfig({build: {rollupOptions: {input: {main: path.resolve(__dirname, 'index.html'),404: path.resolve(__dirname, '404.html')}}}
})

三、Vite vs Webpack 優勢對比

特性ViteWebpack
啟動速度毫秒級隨項目增長線性下降
HMR 更新局部更新 <50ms全量更新 >1s
構建原理ESM 按需編譯 + RollupBundle 打包
配置復雜度極簡配置復雜配置
TS 支持原生支持需要 loader
開發體驗接近原生開發有打包等待

四、最佳實踐建議

  1. 路由懶加載:使用動態導入提升首屏速度
  2. CSS 模塊化:避免全局樣式污染
  3. Tree-shaking:確保組件庫支持 ESM
  4. 按需導入:對大型庫使用 unplugin-auto-import
  5. CDN 優化:通過 build.rollupOptions.external 分離依賴
// 自動導入示例 (vite.config.js)
import AutoImport from 'unplugin-auto-import/vite'export default defineConfig({plugins: [AutoImport({imports: ['vue','vue-router','pinia'],dts: 'src/auto-imports.d.ts'})]
})

通過以上配置和示例,你可以快速構建一個現代化的 Vue 3 應用,享受 Vite 帶來的極致開發體驗!

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

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

相關文章

Vue 3 中使用路由參數跳轉時 watch 觸發重復請求問題詳解

&#x1f4d8;Vue 3 中使用路由參數跳轉時 watch 觸發重復請求問題詳解&#x1f516; 收藏 點贊 關注&#xff0c;掌握 Vue 3 路由參數監聽中的隱藏陷阱&#xff0c;避免詳情頁、嵌套路由頁誤觸發重復請求&#xff01;&#x1f9e9; 一、問題背景 在 Vue 3 項目中&#xff0c…

前端 項目更新通知 (plugin-web-update-notification)

項目版本更新迭代時&#xff0c;需提示用戶更新系統&#xff0c;不然早時間不更新對用戶體驗很不好&#xff0c;所以在每次部署后需要提示用戶&#xff0c;刷新靜態資源。推薦插件 plugin-web-update-notification .具體配置 vite.config.js文件中 import { webUpdateNotice …

【力扣(LeetCode)】數據挖掘面試題0002:當面對實時數據流時您如何設計和實現機器學習模型?

文章大綱一、實時數據處理&#xff1a;構建低延遲的數據管道1. 數據接入與緩沖2. 實時清洗與校驗3. 特征標準化與對齊二、模型設計&#xff1a;選擇適配實時場景的模型架構1. 模型選擇原則三、訓練與更新策略&#xff1a;離線與在線協同&#xff0c;應對概念漂移1. 離線-在線協…

TongWeb8.0.9.0.3部署后端應用,前端訪問后端報405(by sy+lqw)

問題描述&#xff1a; 客戶前端部署在nginx上&#xff0c;后端部署在tongweb8上&#xff08;相當于前后端分離&#xff09;&#xff0c;登錄的時候報錯&#xff0c;f12看network&#xff0c;狀態碼405&#xff0c;如下所示&#xff1a;看console&#xff0c;如下所示&#xff1…

mysql互為主從失效,重新同步

一、分別登錄服務器A和服務器B的mysqlmysql -u root -p 123456789二、分別查看數據庫狀態信息,下邊兩項參數有一項為NO就表示同步異常Slave_IO_Running:從服務器&#xff08;Slave&#xff09;中的 I/O 線程的運行狀態Slave_SQL_Running:從服務器上的 SQL 線程是否正在運行mysq…

板凳-------Mysql cookbook學習 (十一--------6)

https://blog.csdn.net/weixin_43236925/article/details/146382981 清晰易懂的 PHP 安裝與配置教程 12.6 查找每組行中含有最大或最小值的行 mysql> set max_price (select max(price) from painting); Query OK, 0 rows affected (0.01 sec)mysql> select artist.name…

ECS由淺入深第四節:ECS 與 Unity 傳統開發模式的結合?混合架構的藝術

ECS由淺入深第一節 ECS由淺入深第二節 ECS由淺入深第三節 ECS由淺入深第四節 ECS由淺入深第五節 盡管 ECS 帶來了顯著的性能和架構優勢&#xff0c;但在實際的 Unity 項目中&#xff0c;完全摒棄 GameObject 和 MonoBehaviour 往往是不現實的。Unity 引擎本身的大部分功能&…

Mac關閉觸控板

打開 “有鼠標或無線觸控板時忽略內建觸控板”選項即可 參考&#xff1a;Mac如何關閉觸控板防止誤觸&#xff1f;內置的設置就可以達成 - Mac天空

Python:Rich 終端富文本與界面樣式工具庫

??? 1、簡述 Rich 是一個強大的 Python 庫,用于在終端中呈現富文本和精美的格式,讓命令行界面(CLI)應用擁有現代、美觀的輸出效果。本文將深入介紹 Rich 的核心功能,并通過一系列實際示例展示其強大能力。 Rich 由 Will McGugan 開發,主要特點包括: 豐富的文本樣式:支…

深入解析享元模式:通過共享技術高效支持大量細粒度對象

深入解析享元模式&#xff1a;通過共享技術高效支持大量細粒度對象 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 總有一行代碼&#xff0c;能點亮萬千星辰。 &#x1f50d; 在技術的宇宙中&#xff0c;我愿做永不停歇的探索者。 ? 用代碼丈量世…

Docker高級管理

一、Docker 容器的網絡模式 當項目大規模使用 Docker 時&#xff0c;容器通信的問題也就產生了。要解決容器通信問題&#xff0c;必須先了解很多關于網絡的知識。Docker 的網絡模式非常豐富&#xff0c;可以滿足不同容器的通信要求&#xff0c;下表列出了這些網絡模式的主要信息…

ABP VNext + Tye:本地微服務編排與調試

ABP VNext Tye&#xff1a;本地微服務編排與調試 &#x1f680; &#x1f4da; 目錄ABP VNext Tye&#xff1a;本地微服務編排與調試 &#x1f680;TL;DR ?一、環境與依賴 &#x1f6e0;?二、核心配置詳解 &#x1f680;1. 主配置 tye.yaml三、多環境文件 &#x1f331;&am…

Vue響應式原理一:認識響應式邏輯

核心思想&#xff1a;當數據發生變化時&#xff0c;依賴該數據的代碼能夠自動重新執行Vue中的應用&#xff1a;在data或ref/reactive中定義的數據&#xff0c;當數據變化時template會自動更新template的本質&#xff1a; 是render()函數, 用變化之后的數據重新執行render()函數…

Redis:分組與設備在 Redis 中緩存存儲設計

一、緩存存儲結構設計 分組與設備的映射關系&#xff08;使用 Set 結構&#xff09;&#xff1a; 鍵格式&#xff1a;采用 group:{groupId}:devices 的格式作為 Redis 中 Set 的鍵&#xff0c;例如 group:1:devices 就代表了分組 ID 為 1 的分組所關聯的設備集合。值內容&#…

Leetcode 3605. Minimum Stability Factor of Array

Leetcode 3605. Minimum Stability Factor of Array 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3605. Minimum Stability Factor of Array 1. 解題思路 這一題的核心思路是二分法&#xff0c;本質上就是我們給定一個常數kkk&#xff0c;然后考察是否存在一個構造使得能夠…

編譯安裝的Mysql5.7報“Couldn‘t find MySQL server (mysqld_safe)“的原因 筆記250709

編譯安裝的Mysql5.7報"Couldn’t find MySQL server (mysqld_safe)"的原因 筆記250709 MySQL 的安裝路徑與配置文件&#xff08;如 my.cnf 或 mysql.server&#xff09;中指定的 basedir 不一致。 mysqld_safe 文件實際位置與系統查找路徑不匹配&#xff08;常見于自…

在 Ubuntu 下配置 oh-my-posh —— 普通用戶 + root 各自使用獨立主題(共享可執行)

&#x1f9e9; 在 Ubuntu 下配置 oh-my-posh —— 普通用戶 root 各自使用獨立主題&#xff08;共享可執行&#xff09;? 目標說明普通用戶 使用 tokyonight_storm 主題 root 用戶 使用 1_shell 主題 共用全局路徑下的 oh-my-posh 可執行文件 正確加載 Homebrew 到環境變量中…

Spring Boot 項目中的多數據源配置

關鍵詞&#xff1a;Spring Boot、多數據源配置、MySQL、SQL Server、Oracle、動態切換 ? 摘要 在實際企業級開發中&#xff0c;一個 Spring Boot 項目可能需要連接多個數據庫&#xff0c;比如 MySQL、SQL Server 和 Oracle。不同的業務模塊可能依賴不同的數據源&#xff0c;這…

MATLAB/Simulink電機控制仿真代做 同步異步永磁直驅磁阻雙饋無刷

以下是針對 MATLAB/Simulink 電機控制仿真 的系統性解決方案&#xff0c;涵蓋 同步電機、異步電機、永磁電機、直驅電機、磁阻電機、雙饋電機、無刷直流電機&#xff08;BLDC&#xff09; 的建模與控制策略實現&#xff0c;支持代做服務的技術細節和代碼示例。一、電機建模與仿…

限流算法深度探索:從理論到實踐的生產級避坑指南

凌晨3點&#xff0c;監控警報刺耳地尖叫著。我盯著屏幕上垂直下跌的服務可用性曲線&#xff0c;意識到那個被忽視的限流配置項終于引爆了——每秒1000次的支付請求正像洪水般沖垮我們的系統。這次事故讓我深刻理解&#xff1a;限流不是可選項&#xff0c;而是分布式系統的生存法…