vite 是一套網站開發的構建工具,它由 Vue.js 的作者 Evan 所開發。 vite 在法文的意思是「快」,如同其字面上的含義,作者的目標是打造一套如閃電般的快速開發環境。
在本場議程中,除了為各位介紹 vite 帶來的特性外,也示範透過 vite 來啟動一個全新的 Vue.js 3.0 專案,簡單說明 vite 可以為我們做到什麼、vite 運作的原理,以及 vite 的部分原始碼。 最後再橫向對比 vite 與主流網站建構工具的差異。
vite:Make web dev fast againKuro Hsu @ MOPCON 20202020/10/25⚡
View Slide
Kuro Hsu- Front-End Developer- Organizers of Vue.js Taiwan- https://kuro.tw- [email protected]- @kurotanshi
https://book.vue.tw⼯商宣傳
Vue.js Taiwanhttps://vue.tw
⼤綱• vite 是什麼 ? 解決了什麼問題 • 理解 vite 運作原理• 剖析 vite 部分原始碼• 與現⾏主流⼯具的差異對比
vite 是什麼• vite 發⾳ / vit / ,是法語中「快速」的意思• 提供開發者⼀個快速啟動、即時更新的 「開發⼯具」• 安裝即使⽤,預設無設定檔• 加速你的開發體驗,不加速你的應⽤效能⚡
vite 作者• Evan You• 同樣是 Vue.js 的作者• https://github.com/vitejs/vite•v1.0.0-rc.6
vite 解決了什麼問題
實際比較
from: https:///twitter.com/i/status/1290410811802804226
vite 為什麼這麼快
vue-cli-service servebuild
vue-cli-service servebuildBundle(in memory)
vue-cli-service servebuildWeb serverBundle(in memory)
vue-cli-service servebuildWeb server發送請求Bundle(in memory)
vue-cli-service servebuildWeb server回應發送請求Bundle(in memory)
vue-cli-service serveWeb server回應發送請求程式更新buildBundle(in memory)
vue-cli-service servebuildBundle(in memory)Web server回應更新發送請求程式更新
⚡ vite serve ⚡不編譯直接啟動Static webserver
⚡ vite serve ⚡發送請求不編譯直接啟動Static webserver
⚡ vite serve ⚡發送請求回應請求推送更新⚡ vite serve ⚡不編譯直接啟動即時編譯(需要的部分)Static webserver
source: https://www.snowpack.dev/
從建立 vite 專案開始
Bare Module Resolving
原⽣ ES Module 標準
ES modules: A cartoon deep-dive https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/
為了你,總是擋在最前⾯
on-demand compilation
vite 核⼼組成
• Native ES Module• koa ( https://koajs.com/ )• chokidar ( https://github.com/paulmillr/chokidar )• esbuild ( https://github.com/evanw/esbuild )• rollup.js ( https://rollupjs.org )• @vue/compiler-sfc ( optional, 對 vue SFC 的⽀援 )
剖析 vite 部分原始碼( 是 vite 的原始碼,不是建立後的專案原始碼 )
• 開發階段 - dev serve• koa static web server (dev-server)• static-files path rewrite• HMR• 打包建置 - build• 使⽤ rollup 打包• 相依模組預先快取 - optimize
client 端程式碼,主要是 socket 與 HMR 相關打包相關預先編譯與快取dev-server 相關,含各種 Pluginsesbuild 相關定義 HMR interfacevite.config.js設定檔定義相關
koa 建立開發伺服器/src/node/server/index.ts
/src/node/server/index.ts
/src/client/client.tsHot Module Replacement
/src/node/utils/pathUtils.ts/src/node/server/serverPluginModuleRewrite.ts攔截 requests、 替換路徑
/src/node/server/serverPluginModuleRewrite.ts
CSS 編譯與更新
/src/node/server/serverPluginCss.ts
/src/client/client.ts
Optimize 模組相依快取/src/node/optimizer/index.ts
/src/node/optimizer/index.ts
有了 ESM專案還需要打包嗎?
vite ⚡vue-cli
HTTP/1.1 ->- HTTP/2
HTTP/1.1HTTP/23 TCP connectionsSingle TCP connection
https://http2.akamai.com/demo
Recap
• vite 解決什麼問題?• vite 只能⽤在 vue 上⾯嗎?• Vue CLI / webpack 會被 vite 取代嗎?• vite 可以⽤在正式專案上嗎?Recap
https://github.com/vitejs/vite
Thanks !