vite
viteとはなにか
Vite=フランス語で「素早い」という意味の単語
現代の Web プロジェクトのために、より速く無駄のない開発体験を提供することを目的としたビルドツール。下記2つの主要部分で構成される
- 非常に高速な Hot Module Replacement (HMR) など、ネイティブ ES モジュールを利用した豊富な機能拡張を提供する開発サーバー
- Rollup でコードをバンドルするビルドコマンド。プロダクション用に高度に最適化された静的アセットを出力するように事前に設定
推し
- 瞬時にスタートするサーバ
- 超高速なHMR
- 豊富な機能
- 最適化されたビルド
- ユニバーサルなプラグイン
- 完全に型定義がされているAPI
ちょっと試す
$ npm create vite@latest
対応FW多い→Angular足されてた@2024/11/10
初期設定こんな感じ
テンプレもいろいろあるっぽい
サポートされている各テンプレートの詳細は create-vite を参照してください: vanilla, vanilla-ts, vue, vue-ts, react, react-ts, react-swc, react-swc-ts, preact, preact-ts, lit, lit-ts, svelte, svelte-ts, solid, solid-ts, qwik, qwik-ts.
他のツールを含んでいたり、別のフレームワークを対象としている、コミュニティーが管理しているテンプレートについては Awesome Vite をチェックしてみてください。
公式+コミュニティのテンプレ
Vite を使う理由
ES モジュールがブラウザーで利用できるようになるまで、開発者はモジュール化された JavaScript を生成するネイティブの仕組みを持っていませんでした。これは、私たちが「バンドル」のコンセプトに慣れ親しんでいる理由でもあります: すなわち、ブラウザーで実行可能なようにソースモジュールをクロール、処理し、連結するツールを使用しています。
開発サーバーを起動するのにやたらと長く待つこともあります(数分かかることさえ!)。また、Hot Module Replacement(HMR)を利用していても、ファイル編集がブラウザーに反映されるまで数秒かかることもあります。フィードバックの遅さが継続することは、開発者の生産性や幸福度に大きな影響を与える可能性
遅いサーバー起動
開発サーバーがコールドスタートするとき、バンドラーベースのビルドセットアップは、アプリケーション全体を提供する前に、アプリケーション全体を隅々までクロールしてビルドする必要があります。
Vite はまず最初にアプリケーションのモジュールを 2 つのカテゴリーに分割することで、開発サーバーの起動時間を改善します: 依存関係とソースコードです。
- 依存関係
- Vite は、esbuild を使用して依存関係の事前バンドルを行う
- esbuild は Go 言語によって開発されており、依存関係の事前バンドルは、JavaScript ベースよりも 10 倍から 100 倍高速
- ソースコード
- 変換を必要とするプレーンな JavaScript ではないものが含まれることがよくあり、頻繁に編集(例: JSX、CSS や Vue/Svelte コンポーネント)
- 全てのソースコードを同時に読み込む必要はない(例: ルーティングによるコード分割)
- Vite は、ネイティブ ESM を行使してソースコードを提供
- Vite はブラウザーのリクエストに応じて、ソースコードを変換し提供するのみ
今までのバンドラは最初に全部見てバンドルしなきゃいけなかったから遅かったけど、Viteはルートベースでオンリクエストでバンドル?するから早いよってこと?いや、そもそもバンドルしないよって話…?わからん
遅い更新速度
Vite では、HMR をネイティブ ESM 上で行います。ファイルが編集されたとき、Vite は編集されたモジュールと最も近い HMR バウンダリ間のつながりを正確に無効化することで(大抵はモジュール本体だけです)、HMR による更新はアプリケーションのサイズに関係なく一貫して高速で実行されます。
ここでも、ブラウザーにはもっと働いてもらいます
結構ブラウザに処理を寄せるというかデフォルトの挙動でできることはやろうみたいな思想?
プロダクションではバンドルする理由
プロダクションではバンドルするのか…Devではとにかく開発体験を上げるために高速で更新されるようにしておいて、Prodではユーザ体験向上を目指す、みたいな感じか。Dev/Prodで挙動の違いが出てバグるみたいのないんかな…ゆーて昔Next.js/webpackでDev/Prodで挙動が違うバグあったな。
開発サーバーとプロダクションビルド間で、最適化された出力と一貫した動作を確保することは容易なことではありません。
やんな。
なぜesbuildでバンドルしないのか?
Rolldown の準備が完了すると、Vite の Rollup と esbuild の両方が置き換えられ
Rolldownに置き換え予定なのか。
- viteはdev build時にESBuildを使っている
- viteはproduction build時にrollupを使っている
現在、Snowpack チームは Vite を利用した静的サイトビルダーである Astro の開発に取り組んでいます。
そうなんや…SnowpackチームがAstro作ってたとは。
理念
モダン Web を推し進める
- ソースコードは ESM でのみ書くことができます
- Node.js モジュールはブラウザーでは使用できません。
パフォーマンスへの実用的なアプローチ
Vite はその始まり以来、パフォーマンスに重点を置いてきました。その開発サーバーアーキテクチャーは、プロジェクトの規模が大きくなっても高速なまま維持する HMR を可能に
Vite 上にフレームワークを構築する
Vite はユーザーが直接使用することもできますが、フレームワークを作成するためのツールとして輝いています。Vite のコアはフレームワークに依存しませんが、各 UI フレームワーク用に洗練されたプラグインが用意されています
Astro?