Void
Void は Vite の上でフルスタックアプリを構築し、Cloudflare の workerd で実行するフレームワークです。Vue 向けアダプターの @void/vue は、pages/ をサーバーでレンダリングし、ブラウザでハイドレーションします。その隣に vize() を追加すると、すべての .vue ファイルを Vize がコンパイルします。ルーティング、ローダー、アイランド、バインディングはこれまでどおり Void が扱います。
Warning
Vize は開発中です。導入する前に、自分のアプリでビルド結果と診断を比較し、サポート状況を確認してください。
セットアップ
1. プラグインをインストールする
npm install -D @vizejs/vite-plugin
2. vite.config.ts に vize() を追加する
import { voidVue } from "@void/vue/plugin";
import { vize } from "@vizejs/vite-plugin";
import { defineConfig } from "vite";
import { voidPlugin } from "void";
export default defineConfig({
plugins: [voidPlugin(), vize(), voidVue()],
});
voidVue() は独自に @vitejs/plugin-vue を含んでいます。これを取り除く必要はありません。各 SFC をひとつのコンパイラだけが扱うように、vize() が置き換えます。exclude を指定した場合は plugin-vue が残り、Vize が対象外にしたファイルをコンパイルします。
3. いつもどおり Void を実行する
npx vite dev
npx vite build
ほかの変更は必要ありません。
- workerd 上のサーバーレンダリング。 workerd には import できる
node_modulesがないため、Vue とvue/server-rendererをワーカーにバンドルします。 - ルートの CSS とプリロード。 クライアントマニフェストのキーはソースパス(
pages/index.vue)です。Void はこのキーでルートのスタイルシートを探し、サーバーレンダリングした HTML に追加します。 vite devの HMR。 テンプレートを編集してもコンポーネントの状態は保たれます。ローダーの props もそのまま残ります。- ページの props。
.server.tsのローダーから import したPropsを使うdefineProps<Props>()は、plugin-vue と同じようにコンパイルされます。
型チェック
Void は、ルート、環境変数、バインディングの型を含む .void/tsconfig.json を生成します。プロジェクトの tsconfig.json はこれを継承します。生成ファイルを用意するために一度 void prepare を実行する(または開発サーバーを起動する)と、チェックできます。
npx void prepare
vize check
vize check は生成された files と paths を読み込みます。そのため .vue ファイルでも、次の型が vue-tsc と同じように付きます。
InferProps<typeof loader>によるローダーの propsvoid/clientのfetch(ルートのパス、メソッド、レスポンスの型)void/envのenvと、void/kvなどのバインディングモジュール
lint とフォーマット
vize lint と vize fmt はプロジェクトのルートからファイルを探し、.gitignore に書かれたものを除外します。Void の .gitignore には dist、.void、.wrangler、.void-wrangler.jsonc が含まれるため、生成ファイルは lint やフォーマットの対象になりません。
エディター
言語サーバーも同じ tsconfig.json を使います。生成された型が存在するように、プロジェクトを開く前に void prepare を実行してください。
テスト方法
Vite プラグインまたはネイティブコンパイラが変わるたびに、CI はバージョンを固定した Void 1.1.12 と @void/vue のアプリ(tools/support/compat/void/fixtures/void-vue)をビルドし、次の項目を確認します。
- 本番ビルドと、
vite previewによる workerd 上の SSR(ルートの CSS と KV バインディングを含む) - 開発時の SSR、ハイドレーション、状態を保つ HMR
vize checkとvue-tscが同じエラーを報告することvize lintとvize fmt --check
Void 上の Nuxt(nuxt.config.ts で voidPlugin() を使う構成)は、このフィクスチャではまだ検証していません。その場合は Nuxt 統合を使ってください。