ビルド・開発ガイド¶
vite dev の動作¶
開発時の処理フロー:
- renderer dev server を起動
- プラグインが renderer dev server URL を解決
- preload の有無に応じて
electron_mainとelectron_preloadを watch build - build 完了イベントを内部 coordinator に渡す
- 必要なタイミングでのみ Electron を再起動
再起動の仕組み¶
再起動は単純な都度実行ではなく、内部 scheduler によって coalesce されます。短時間に複数回 build 完了が発生しても、不要な再起動が増えにくい構成です。
preload のみの build 完了では Electron は再起動されません。main と preload の両方が ready になったタイミングで初めて再起動が発生します(preload がない構成では main のみで判定)。
renderer dev server URL の注入¶
- internal mode: プラグインが起動した Vite dev server の URL を環境変数(既定:
VITE_DEV_SERVER_URL)に注入 - external mode:
renderer.devUrlで指定した URL を同様に環境変数に注入
Electron main process 側では process.env.VITE_DEV_SERVER_URL から URL を取得できます。
vite build の動作¶
ビルド時の処理フロー:
- client environment をビルド
electron_mainenvironment をビルド- preload があれば
electron_preloadenvironment もビルド
プラグインは builder: {} を自動で有効化するため、利用側のスクリプトで vite build --app を明示する必要はありません。
external mode でのビルド¶
external renderer mode では、client environment 側に空の仮想 entry を差し込みます。これにより HTML を持たない desktop package でも Vite app build 自体を成立させ、最終 bundle 出力は generateBundle フックで削除します。
出力先¶
| 対象 | 既定の出力先 | 形式 |
|---|---|---|
| renderer (client) | dist/ |
Vite 標準 |
| main | dist-electron/main.js |
ESM |
| preload | dist-electron/preload.cjs |
CJS |
outDir を変更しても dev 監視が壊れにくいように、watch ignore パターンが自動で追加されます。
External Renderer 構成¶
モノレポで renderer を別の Vite app として分離する構成です。
基本的な使い方¶
desktop 側の vite.config.ts:
import { defineConfig } from 'vite'
import { electron } from '@srymh/vite-plugin-electron'
export default defineConfig({
plugins: [
electron({
main: { entry: 'src/main.ts' },
preload: { entry: 'src/preload.ts' },
renderer: {
mode: 'external',
devUrl: 'http://localhost:5173',
},
}),
],
})
ポイント¶
- desktop package 側に
index.htmlを置く必要はない appType: 'custom'が自動で設定される- 空の仮想 client entry でビルドが成立する
- renderer app は独立した Vite app として別途 dev / build する
devUrlEnvVar のカスタマイズ¶
renderer: {
mode: 'external',
devUrl: 'http://localhost:5173',
devUrlEnvVar: 'ELECTRON_RENDERER_URL',
}
Electron main 側では process.env.ELECTRON_RENDERER_URL で URL を取得します。
Electron プロセスの管理¶
起動¶
プラグインは electron パッケージのバイナリを createRequire で解決し、child_process.spawn で起動します。
Unix/macOS では detached: true で起動し、プロセスグループとして管理します。
停止¶
- Unix/macOS: SIGTERM → 5 秒待機 → SIGKILL → 3 秒待機(プロセスグループに対して送信)
- Windows:
taskkill /pid /t /fでプロセスツリーごと停止(10 秒タイムアウト)
Electron 終了時の挙動¶
Electron プロセスが終了すると、Vite dev server も終了します(exit code 1)。これは pnpm --parallel との互換性のためです。