Vite和Vue CLI的優(yōu)劣
Vue 生態(tài)系統(tǒng)中有一個(gè)名為 Vite 的新構(gòu)建工具,它的開(kāi)發(fā)服務(wù)器比 Vue CLI 快 10-100 倍。
這是否意味著 Vue CLI 已經(jīng)過(guò)時(shí)了?在本文中,我將比較這兩種構(gòu)建工具,并說(shuō)明它們的優(yōu)缺點(diǎn),以便你可以決定哪一種適合你的下一個(gè)項(xiàng)目。
Vue CLI 概述
大多數(shù) Vue 開(kāi)發(fā)人員都知道,Vue CLI 是使用標(biāo)準(zhǔn)構(gòu)建工具和最佳實(shí)踐配置快速建立基于 Vue 的項(xiàng)目的不可或缺的工具。
其主要功能包括:
- 工程腳手架
- 帶熱模塊重載的開(kāi)發(fā)服務(wù)器
- 插件系統(tǒng)
- 用戶(hù)界面
在本討論中需要注意的是,Vue CLI 是構(gòu)建在 Webpack 之上的,因此開(kāi)發(fā)服務(wù)器和構(gòu)建功能和性能都將是 Webpack 的超集。
Vite 概述
與 Vue CLI 類(lèi)似,Vite 也是一個(gè)提供基本項(xiàng)目腳手架和開(kāi)發(fā)服務(wù)器的構(gòu)建工具。
然而,Vite 并不是基于 Webpack 的,它有自己的開(kāi)發(fā)服務(wù)器,利用瀏覽器中的原生 ES 模塊。這種架構(gòu)使得 Vite 比 Webpack 的開(kāi)發(fā)服務(wù)器快了好幾個(gè)數(shù)量級(jí)。Vite 采用 Rollup 進(jìn)行構(gòu)建,速度也更快。
Vite 目前還處于測(cè)試階段,看來(lái) Vite 項(xiàng)目的目的并不是像 Vue CLI 那樣的一體化工具,而是專(zhuān)注于提供一個(gè)快速的開(kāi)發(fā)服務(wù)器和基本的構(gòu)建工具。
Vite 怎么這么快?
Vite 開(kāi)發(fā)服務(wù)器至少會(huì)比 Webpack 快 10 倍左右。對(duì)于一個(gè)基本的項(xiàng)目來(lái)說(shuō),與 2.5 秒相比,開(kāi)發(fā)構(gòu)建/重新構(gòu)建的時(shí)間相差 250ms。
在一個(gè)較大的項(xiàng)目中,這種差異會(huì)變得更加明顯。Webpack 開(kāi)發(fā)服務(wù)器在構(gòu)建/重新構(gòu)建時(shí)可能會(huì)慢到 25-30 秒,有時(shí)甚至更慢。與此同時(shí),Vite 開(kāi)發(fā)服務(wù)器可能會(huì)以恒定的 250ms 的速度為同一個(gè)項(xiàng)目提供服務(wù)。
這顯然是開(kāi)發(fā)經(jīng)驗(yàn)和游戲規(guī)則改變的差異,Vite 是如何做到這一點(diǎn)的?
Webpack 開(kāi)發(fā)服務(wù)器架構(gòu)
Webpack 的工作方式是,它通過(guò)解析應(yīng)用程序中的每一個(gè) import 和 require ,將整個(gè)應(yīng)用程序構(gòu)建成一個(gè)基于 JavaScript 的捆綁包,并在運(yùn)行時(shí)轉(zhuǎn)換文件(例如 Sass、TypeScript、SFC)。
這都是在服務(wù)器端完成的,依賴(lài)的數(shù)量和改變后構(gòu)建/重新構(gòu)建的時(shí)間之間有一個(gè)大致的線性關(guān)系。
Vite 開(kāi)發(fā)服務(wù)器架構(gòu)
Vite 不捆綁應(yīng)用服務(wù)器端。相反,它依賴(lài)于瀏覽器對(duì) JavaScript 模塊的原生支持(也就是 ES 模塊,是一個(gè)比較新的功能)。
瀏覽器將在需要時(shí)通過(guò) HTTP 請(qǐng)求任何 JS 模塊,并在運(yùn)行時(shí)進(jìn)行處理。Vite 開(kāi)發(fā)服務(wù)器將按需轉(zhuǎn)換任何文件(如 Sass、TypeScript、SFC)。
這種架構(gòu)避免了服務(wù)器端對(duì)整個(gè)應(yīng)用的捆綁,并利用瀏覽器高效的模塊處理,提供了一個(gè)明顯更快的開(kāi)發(fā)服務(wù)器。
提示:當(dāng)你對(duì)應(yīng)用程序進(jìn)行 code-split 和 tree-shake 動(dòng)時(shí),Vite 的速度會(huì)更快,因?yàn)樗患虞d它需要的模塊,即使是在開(kāi)發(fā)階段。這與 Webpack 不同,在 Webpack 中,代碼拆分只對(duì)生產(chǎn)包有利。
Vite 的缺點(diǎn)
你可能已經(jīng)明白了,Vite 的主要特點(diǎn)是它的開(kāi)發(fā)服務(wù)器快得離譜。
如果沒(méi)有這個(gè)功能,可能就不會(huì)再討論了,因?yàn)榕c Vue CLI 相比,它確實(shí)沒(méi)有其他的功能,而且確實(shí)有一些缺點(diǎn)。
由于 Vite 使用了 JavaScript 模塊,所以最好讓依賴(lài)關(guān)系也使用 JavaScript 模塊。雖然大多數(shù)現(xiàn)代 JS 包都提供了這一點(diǎn),但一些老的包可能只提供 CommonJS 模塊。
Vite 可以將 CommonJS 轉(zhuǎn)換為 JavaSript 模塊,但在一些邊緣情況下它可能無(wú)法做到。當(dāng)然,它還需要支持 JavaScript 模塊的瀏覽器。
與 Webpack/Vue CLI 不同,Vite 無(wú)法創(chuàng)建針對(duì)舊版瀏覽器、web components 等的捆綁包。
而且,與 Vue CLI 不同,開(kāi)發(fā)服務(wù)器和構(gòu)建工具是不同的系統(tǒng),導(dǎo)致在生產(chǎn)與開(kāi)發(fā)中可能出現(xiàn)不一致的行為。
Vue CLI vs Vite 總結(jié)
Vue CLI 優(yōu)點(diǎn) | Vue CLI 缺點(diǎn) |
---|---|
經(jīng)歷過(guò)戰(zhàn)斗考驗(yàn),可靠 | 開(kāi)發(fā)服務(wù)器速度與依賴(lài)數(shù)量成反比 |
與 Vue 2 兼容 | |
可以捆綁任何類(lèi)型的依賴(lài)關(guān)系 | |
插件生態(tài)系統(tǒng) | |
可以針對(duì)不同的目標(biāo)進(jìn)行構(gòu)建 |
Vite 優(yōu)點(diǎn) | Vite 缺點(diǎn) |
---|---|
開(kāi)發(fā)服務(wù)器比 Webpack 快 10-100 倍 | 只能針對(duì)現(xiàn)代瀏覽器(ES2015+) |
將 code-splitting 作為優(yōu)先事項(xiàng) | 與 CommonJS 模塊不完全兼容 |
處于測(cè)試階段,僅支持 Vue 3 | |
最小的腳手架不包括 Vuex、路由器等 | |
不同的開(kāi)發(fā)服務(wù)器與構(gòu)建工具 |
Vite 的未來(lái)
雖然上面的比較主要集中在 Vite 和 Vue CLI 的現(xiàn)狀上,但仍有幾點(diǎn)需要考慮:
- 僅當(dāng)瀏覽器中的 JavaScript 模塊支持得到改善時(shí),Vite 才會(huì)有所改善。
- 隨著 JS 生態(tài)系統(tǒng)的追趕,更多的軟件包將支持 JavaScript 模塊,減少 Vite 無(wú)法處理的邊緣情況。
- Vite 仍處于測(cè)試階段–功能可能會(huì)有變化。
- 有可能 Vue CLI 最終會(huì)結(jié)合 Vite,這樣你就不用再使用其中一個(gè)了。
值得注意的是,Vite 并不是唯一一個(gè)利用瀏覽器中 JavaScript 模塊的開(kāi)發(fā)服務(wù)器項(xiàng)目。還有更著名的Snowpack,甚至可能會(huì)擠掉 Vite 的發(fā)展。時(shí)間會(huì)證明這一點(diǎn)
以上就是Vite和Vue CLI的優(yōu)劣的詳細(xì)內(nèi)容,更多關(guān)于Vite和Vue CLI的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue?el-table實(shí)現(xiàn)動(dòng)態(tài)添加行和列具體代碼
最近遇到一個(gè)動(dòng)態(tài)增加行和列的需求,所以這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于vue?el-table實(shí)現(xiàn)動(dòng)態(tài)添加行和列的相關(guān)資料,需要的朋友可以參考下2023-09-09一個(gè)vue組件庫(kù)發(fā)布到npm的完整實(shí)現(xiàn)過(guò)程
工作的時(shí)候總是使用別人的npm包,然而我有時(shí)心底會(huì)好奇自己如何發(fā)布一個(gè)npm包呢,什么時(shí)候自己的包能夠被很多人喜歡并使用呢,下面這篇文章主要給大家介紹了關(guān)于一個(gè)vue組件庫(kù)發(fā)布到npm的相關(guān)資料,需要的朋友可以參考下2022-03-03Vue3?$emit用法指南(含選項(xiàng)API、組合API及?setup?語(yǔ)法糖)
這篇文章主要介紹了Vue3?$emit用法指南,使用?emit,我們可以觸發(fā)事件并將數(shù)據(jù)傳遞到組件的層次結(jié)構(gòu)中,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07詳解在Vue中如何實(shí)現(xiàn)表單圖片裁剪與預(yù)覽
在前端開(kāi)發(fā)中,表單提交是一個(gè)常見(jiàn)的操作,有時(shí)候,我們需要上傳圖片,但是上傳的圖片可能會(huì)非常大,這會(huì)增加服務(wù)器的負(fù)擔(dān),同時(shí)也會(huì)降低用戶(hù)的體驗(yàn),因此,我們通常需要對(duì)上傳的圖片進(jìn)行裁剪和預(yù)覽,本文主要給大家介紹如何在Vue中進(jìn)行表單圖片裁剪與預(yù)覽2023-06-06vue-element-admin開(kāi)發(fā)教程(v4.0.0之后)
由于vue-element-admin的架構(gòu)再4.0.0版本后做了重構(gòu),整體結(jié)構(gòu)上和之前的還是很相似的,但是也有些變化,本文就介紹vue-element-admin開(kāi)發(fā)教程(v4.0.0之后),感興趣的可以了解一下2022-04-04手把手帶你使用vue+node作后端連接數(shù)據(jù)庫(kù)
為了快速學(xué)習(xí)nodejs制作后端并和數(shù)據(jù)庫(kù)進(jìn)行交互的方法,所以趕緊寫(xiě)一篇這樣的文章出來(lái),下面這篇文章主要給大家介紹了關(guān)于手把手帶你使用vue+node作后端連接數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下2023-03-03vue3項(xiàng)目目錄結(jié)構(gòu)示例詳解
更好的了解項(xiàng)目的目錄結(jié)構(gòu),能更好的去開(kāi)發(fā)項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于vue3項(xiàng)目目錄結(jié)構(gòu)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02Vue express鑒權(quán)零基礎(chǔ)入門(mén)
這篇文章主要介紹了詳解express鑒權(quán),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02vue 實(shí)現(xiàn)無(wú)規(guī)則截圖
這篇文章主要介紹了vue 實(shí)現(xiàn)無(wú)規(guī)則截圖的方法,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下2021-04-04vue關(guān)閉開(kāi)發(fā)模式提示的簡(jiǎn)單解決辦法
Vue開(kāi)發(fā)模式是一種基于Vue.js框架的開(kāi)發(fā)方式,它可以幫助開(kāi)發(fā)者更高效地構(gòu)建和維護(hù)復(fù)雜的Web應(yīng)用程序,下面這篇文章主要給大家介紹了關(guān)于vue關(guān)閉開(kāi)發(fā)模式提示的簡(jiǎn)單解決辦法,需要的朋友可以參考下2024-04-04