Vize

Vue の設定を共有する

ネイティブの Vue 設定を vite.config.ts の vue にまとめます。コンパイラ、 CLI、エディターで同じオプション名を使えます。ビルド、型チェック、lint、整形を まとめて実行するには、Vite+ 連携から始めてください。

設定を一つにまとめる

import { defineConfig } from "@vizejs/vite-plugin/vite-plus";

export default defineConfig({
  vue: {
    version: "3",
    compiler: { sourceMap: true },
    typeChecker: { strict: true },
    linter: { preset: "essential" },
    formatter: { singleQuote: true },
    languageServer: { hover: true },
  },
  server: { port: 3000 },
});

vue では、ネイティブの compiler、typeChecker、linter、formatter、 languageServer、globalTypes、files、ignores、basePath、lib を使います。 version、vite、musea、experimentals、dialect、name、entries も指定できます。コンパイラと整形のセクションには enabled はありません。型チェッカー、リンター、言語サーバーでは、ネイティブと 同じ enabled を使えます。vue に未対応のキーを指定するとエラーになります。

既存の Vite+ 設定を使う

import { defineConfig } from "@vizejs/vite-plugin/vite-plus";

const vpConfig = { server: { port: 3000 } };
const vueConfig = {
  compiler: { sourceMap: true },
  formatter: { singleQuote: true },
};

export default defineConfig(vpConfig).withVue(vueConfig);

既存の Vite+ オブジェクト、Promise、設定関数、async 関数をそのまま渡せます。 設定関数には Vite の環境を渡し、プラグイン、フック、Vite+ のフィールドを保ちます。 Vue プラグインの注入は1回だけ実行します。通常の JavaScript オブジェクトを import して 共有できるため、Vize 専用の設定ファイルや独自の extends は不要です。

パスとスコープ

Vite の設定にあるネイティブの相対パスは、選択された Vite の root を基準にします。 root 自体は設定ファイルのディレクトリから解決します。CLI に直接渡したファイル名は、 従来どおりコマンドを実行したディレクトリを基準にします。

import { defineConfig } from "@vizejs/vite-plugin/vite-plus";

export default defineConfig({
  root: "packages/app",
  vue: {
    files: ["src/**/*.vue"],
    entries: [
      {
        files: ["src/trusted/**/*.vue"],
        linter: { rules: { "vue/no-v-html": "off" } },
      },
    ],
  },
});

vue.entries の各エントリには、現在 name、basePath、files、ignores、compiler、linter を指定できます。 ほかのセクションと version はプロジェクト全体に指定し、エントリに置くとエラーになります。 一致する compiler 設定は Vite と CLI でファイルごとに適用されます。エディターでのファイル単位のスコープ適用と、 ほかのセクションのスコープ対応は未完了です。

TypeScript プロジェクトの設定

TypeScript の compilerOptions、標準の extends、references は既存の TypeScript プロジェクトに置きます。strictTemplates などの Vue テンプレート設定は vueCompilerOptions に記述します。CLI とエディタはこのプロジェクト設定を使います。 設定ガイドも参照してください。

ワークスペース外の設定を編集する

エディタは、Vite 設定から import したヘルパーと TypeScript プロジェクトの設定依存を 追跡します。ワークスペース外のファイルも対象です。再読み込みに失敗した場合は、 最後に正常に読み込めた設定を保ちます。その依存グラフに加え、直近の失敗した 読み込みで具体的に判明した監視可能なファイルも対象にします。失敗した設定値は採用しません。

外部ファイルの変更を自動通知するには、LSP クライアントが dynamicRegistration と relativePatternSupport の両方に対応し、監視の登録が成功する必要があります。 確認したクライアントの対応は次のとおりです。

クライアントの基準版 外部設定の変更
VS Code 1.107.1 / languageclient 9.0.1 両方の機能に対応し、自動監視を登録できます。
Zed 1.16.1 両方の対応を通知します。GUI での監視動作の検証は未完了です。
Neovim 0.11.4 macOS・Windows の既定値は両方に対応します。Linux の既定値では次の通常の言語操作時に再確認します。
Helix 25.07.1 相対パターンに非対応です。次の通常の言語操作時に再確認します。
Vim / vim-lsp 474c6566 動的なファイル監視はありません。次の通常の言語操作時に再確認します。プロジェクト内のバッファ保存でも Vize に通知します。
Emacs 29.3 / Eglot 1.12.29 プロジェクト内のディレクトリ監視は外部の対象をカバーしません。次の通常の言語操作時に再確認します。

ホバーや補完を要求するなど、通常の言語操作でも設定の変更を再確認します。 外部ファイルを監視できないクライアントでも、この操作で修復を検知できます。 別のプロセスが変更した直後に、自動で反映されるわけではありません。 Zed の自動テストは現在プロトコルの再生を使っており、GUI の動作を証明するものでは ありません。クライアント側で対応機能を上書きした場合も、自動監視が無効になり得ます。

見つからない import 先を修復する

新しく見つからなくなったヘルパーは、Node が構造化されたローカルの file: URL を 返す場合や、Vite 8 が拡張子付きファイルへの明示的な相対・絶対パスを返す場合に 監視対象にできます。必要な監視にクライアントが対応していれば、そのファイルの 作成・修復をきっかけに再読み込みできます。

Vite のバンドルが失敗した場合、不足しているファイルが報告されても、途中のヘルパーが すべて列挙されるとは限りません。列挙されなかったヘルパーへの編集は、次の通常の言語操作で 検出します。報告された不足ファイル自体は、自動監視の対象にできます。

具体的なファイル情報を持たない Vite 7 のエラー、裸のパッケージ名、拡張子を省いた リクエスト、独自に throw したエラー、%・#・? を含む曖昧な Vite の指定では、 次の通常の言語操作で再試行します。既知の依存グラフの監視は続けますが、エラーの 文章から新しい監視対象を推測することはありません。

設定関数は読み込みごとに1回実行します。再読み込みでは、既知のファイルを前後で確認します。 Vite の公開バンドル API が新しいヘルパーを発見する前に、そのファイルが変更される 場合もあります。複数ファイルへの同時編集を、一括した同一時点の状態として取得する 仕組みではありません。新しく発見したファイルの観測結果は、次の通常の言語操作で 再確認します。

Vite のバンドル API は、import に使った symlink のパスを含めず、解決先のヘルパーだけを 返す場合があります。既知の解決先への編集は検出しますが、symlink の接続先だけを変えた 場合は言語サーバーを再読み込みしてください。依存グラフにない import 経路は、通常の言語操作でも 検出できません。Vite がインストールされていない場合、Node の resolve フックは、拡張子付きの 明示的なローカルファイル指定も監視専用のパスとして保持します。

既存の設定を移行する

トップレベルの vize: と vize.config.* のネイティブ設定を vue: に移します。 Vue ツールには typeChecker、linter、formatter を使い、Vite+ のタスク拡張には typecheck、lint.vue、fmt.vue、pack.vue を使います。廃止した専用設定の形式と Vize 独自の extends は読みません。共有する設定は通常の JavaScript オブジェクトとして import してください。vueCompilerOptions を含む TypeScript の設定は tsconfig.json に置きます。