Skip to main content

vite-patterns

Vite build tool patterns including config, plugins, HMR, env variables, proxy setup, SSR, library mode, dependency pre-bundling, and build optimization. Activate when working with vite.config.ts, Vite plugins, or Vite-based projects.

Source facts

Repository
affaan-m/ECC
Last source activity
May 17, 2026 at 06:31
Detected SKILL.md language
Japanese
Stars
294,201
Forks
43,555

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
vite-patterns
description
Vite build tool patterns including config, plugins, HMR, env variables, proxy setup, SSR, library mode, dependency pre-bundling, and build optimization. Activate when working with vite.config.ts, Vite plugins, or Vite-based projects.
origin
ECC
# Vite パタヌン Vite 8+ プロゞェクトのビルドツヌルおよびデベロップメントサヌバヌのパタヌン。蚭定、環境倉数、プロキシ蚭定、ラむブラリモヌド、䟝存関係の事前バンドル、䞀般的な本番環境の萜ずし穎をカバヌ。 ## 䜿甚するタむミング - `vite.config.ts` たたは `vite.config.js` を蚭定するずき - 環境倉数たたは `.env` ファむルを蚭定するずき - APIバック゚ンド甚のデベロップメントサヌバヌプロキシを蚭定するずき - ビルド出力チャンク、ミニファむ、アセットを最適化するずき - `build.lib` でラむブラリを公開するずき - 䟝存関係の事前バンドルたたはCJS/ESM盞互運甚のトラブルシュヌティングをするずき - HMR、デベロップメントサヌバヌ、たたはビルド゚ラヌをデバッグするずき - Viteプラグむンの遞択たたは順序付けをするずき ## 動䜜の仕組み - **デベロップメントモヌド**は゜ヌスファむルをネむティブESMずしお提䟛したすバンドルなし。倉換はモゞュヌルリク゚ストごずにオンデマンドで行われるため、コヌルドスタヌトが速くHMRが粟確です。 - **ビルドモヌド**はRolldownv7+たたはRollupv5〜v6を䜿甚しお、ツリヌシェむキング、コヌド分割、Oxcベヌスのミニファむでアプリを本番甚にバンドルしたす。 - **䟝存関係の事前バンドル**はesbuildを通じおCJS/UMD䟝存関係をESMに䞀床倉換し、結果を `node_modules/.vite` にキャッシュしたす。これにより埌続の起動では凊理をスキップできたす。 - **プラグむン**はデベロップメントずビルドにわたっお統䞀されたむンタヌフェヌスを共有したす。同じプラグむンオブゞェクトが、デベロップメントサヌバヌのオンデマンド倉換ず本番パむプラむンの䞡方で機胜したす。 - **環境倉数**はビルド時に静的にむンラむン化されたす。`VITE_` プレフィックス付きの倉数はバンドル内のパブリック定数になり、プレフィックスなしのものはクラむアントコヌドから芋えたせん。 ## 䟋 ### 蚭定の構造 #### 基本蚭定 ```typescript // vite.config.ts import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' export default defineConfig({ plugins: [react()], resolve: { alias: { '@': new URL('./src', import.meta.url).pathname }, }, }) ``` #### 条件付き蚭定 ```typescript // vite.config.ts import { defineConfig, loadEnv } from 'vite' import react from '@vitejs/plugin-react' export default defineConfig(({ command, mode }) => { const env = loadEnv(mode, process.cwd()) // VITE_ プレフィックスのみ安党 return { plugins: [react()], server: command === 'serve' ? { port: 3000 } : undefined, define: { __API_URL__: JSON.stringify(env.VITE_API_URL), }, } }) ``` #### 䞻芁な蚭定オプション | キヌ | デフォルト | 説明 | |-----|---------|-------------| | `root` | `'.'` | プロゞェクトルヌト`index.html` の堎所 | | `base` | `'/'` | デプロむされたアセットのパブリックベヌスパス | | `envPrefix` | `'VITE_'` | クラむアントに公開する環境倉数のプレフィックス | | `build.outDir` | `'dist'` | 出力ディレクトリ | | `build.minify` | `'oxc'` | ミニファむアヌ`'oxc'`、`'terser'`、たたは `false` | | `build.sourcemap` | `false` | `true`、`'inline'`、たたは `'hidden'` | ### プラグむン #### 必須プラグむン ほずんどのプラグむンのニヌズは、少数のよく管理されたパッケヌゞでカバヌできたす。独自のプラグむンを䜜成する前にこれらを怜蚎しおください。 | プラグむン | 目的 | 䜿甚タむミング | |--------|---------|-------------| | `@vitejs/plugin-react-swc` | SWC経由のReact HMR + Fast Refresh | ReactアプリのデフォルトBabelバリアントより高速 | | `@vitejs/plugin-react` | Babel経由のReact HMR + Fast Refresh | Babelプラグむンが必芁な堎合のみemotion、MobXデコレヌタヌ | | `@vitejs/plugin-vue` | Vue 3 SFCサポヌト | Vueアプリ | | `vite-plugin-checker` | ワヌカヌスレッドでHMRオヌバヌレむ付きの `tsc` + ESLintを実行 | **TypeScriptアプリ党般** — Viteは `vite build` 䞭に型チェックを行いたせん | | `vite-tsconfig-paths` | `tsconfig.json` の `paths` ゚むリアスを尊重 | `tsconfig.json` に゚むリアスが既にある堎合 | | `vite-plugin-dts` | ラむブラリモヌドで `.d.ts` ファむルを出力 | TypeScriptラむブラリを公開するずき | | `vite-plugin-svgr` | SVGをReactコンポヌネントずしおむンポヌト | SVGをコンポヌネントずしお䜿甚するReactアプリ | | `rollup-plugin-visualizer` | バンドルのツリヌマップ/サンバヌストレポヌト | 定期的なバンドルサむズの監査`enforce: 'post'` を䜿甚 | | `vite-plugin-pwa` | れロ蚭定のPWA + Workbox | オフラむン察応アプリ | **重芁な泚意** `vite build` はトランスパむルしたすが、型チェックは行いたせん。`vite-plugin-checker` を远加するか、CIで `tsc --noEmit` を実行しない限り、型゚ラヌは本番環境にサむレントに出荷されたす。 #### カスタムプラグむンの䜜成 カスタムプラグむンの䜜成は皀です。ほずんどのニヌズは既存のプラグむンでカバヌできたす。必芁な堎合は `vite.config.ts` にむンラむンで曞き始め、再利甚する堎合にのみ抜出しおください。 ```typescript // vite.config.ts — 最小限のむンラむンプラグむン function myPlugin(): Plugin { return { name: 'my-plugin', // 必須、䞀意でなければならない enforce: 'pre', // 'pre' | 'post'オプション apply: 'build', // 'build' | 'serve'オプション transform(code, id) { if (!id.endsWith('.custom')) return return { code: transformCustom(code), map: null } }, } } ``` **䞻芁フック** `transform`゜ヌスの倉曎、`resolveId` + `load`仮想モゞュヌル、`transformIndexHtml`HTMLぞの泚入、`configureServer`デベロップメントミドルりェアの远加、`hotUpdate`カスタムHMR — v7+で非掚奚の `handleHotUpdate` の代替。 **仮想モゞュヌル**は `\0` プレフィックス芏玄を䜿甚したす — `resolveId` は `'\0virtual:my-id'` を返すこずで他のプラグむンがスキップしたす。ナヌザヌコヌドは `'virtual:my-id'` をむンポヌトしたす。 完党なプラグむンAPIは [vite.dev/guide/api-plugin](https://vite.dev/guide/api-plugin) を参照しおください。開発䞭の倉換パむプラむンのデバッグには `vite-plugin-inspect` を䜿甚しおください。 ### HMR API フレヌムワヌクプラグむン`@vitejs/plugin-react`、`@vitejs/plugin-vue` などはHMRを自動的に凊理したす。カスタム状態ストア、デベロップメントツヌル、たたは曎新を跚いで状態を保持する必芁があるフレヌムワヌク非䟝存のナヌティリティをビルドする堎合のみ、`import.meta.hot` を盎接䜿甚しおください。 ```typescript // src/store.ts — バニラモゞュヌルの手動HMR if (import.meta.hot) { // 曎新を跚いで状態を保持する.dataを再代入せず、必ず倉曎するこず import.meta.hot.data.count = import.meta.hot.data.count ?? 0 // モゞュヌルが眮き換えられる前にサむド゚フェクトをクリヌンアップ import.meta.hot.dispose((data) => clearInterval(data.intervalId)) // このモゞュヌル自身の曎新を受け入れる import.meta.hot.accept() } ``` すべおの `import.meta.hot` コヌドは本番ビルドからツリヌシェむクされたす — ガヌドを削陀する必芁はありたせん。 ### 環境倉数 Viteは `.env`、`.env.local`、`.env.[mode]`、`.env.[mode].local` をその順序で読み蟌みたす埌のものが前のものを䞊曞き。`*.local` ファむルはgitignoreされおおり、ロヌカルのシヌクレット甚です。 #### クラむアントサむドアクセス `VITE_` プレフィックス付きの倉数のみがクラむアントコヌドに公開されたす ```typescript import.meta.env.VITE_API_URL // string import.meta.env.MODE // 'development' | 'production' | カスタム import.meta.env.BASE_URL // base蚭定倀 import.meta.env.DEV // boolean import.meta.env.PROD // boolean import.meta.env.SSR // boolean ``` #### 蚭定での環境倉数䜿甚 ```typescript // vite.config.ts import { defineConfig, loadEnv } from 'vite' export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd()) // VITE_ プレフィックスのみ安党 return { define: { __API_URL__: JSON.stringify(env.VITE_API_URL), }, } }) ``` ### セキュリティ #### `VITE_` プレフィックスはセキュリティ境界ではない `VITE_` でプレフィックスされた倉数は**ビルド時にクラむアントバンドルに静的にむンラむン化されたす**。ミニファむ、base64゚ンコヌド、゜ヌスマップの無効化では隠せたせん。悪意のある攻撃者は出荷されたJavaScriptから任意の `VITE_` 倉数を抜出できたす。 **ルヌル** パブリックな倀APIのURL、フィヌチャヌフラグ、パブリックキヌのみを `VITE_` 倉数に入れおください。シヌクレットAPIトヌクン、デヌタベヌスのURL、プラむベヌトキヌはAPIたたはサヌバヌレス関数の背埌にあるサヌバヌサむドに眮かなければなりたせん。 #### `loadEnv('')` の萜ずし穎 ```typescript // BAD: 第3匕数ずしお '' を枡すず、サヌバヌのシヌクレットを含む党おの環境倉数が読み蟌たれ、 // `define` でクラむアントコヌドにむンラむン化できおしたう。 const env = loadEnv(mode, process.cwd(), '') // GOOD: 明瀺的なプレフィックスリスト const env = loadEnv(mode, process.cwd(), ['VITE_', 'APP_']) ``` #### 本番環境の゜ヌスマップ 本番環境の゜ヌスマップはオリゞナルの゜ヌスコヌドを挏掩させたす。゚ラヌトラッカヌSentry、Bugsnagにアップロヌドしおロヌカルで削陀しない限り、無効にしおください ```typescript build: { sourcemap: false, // デフォルト — このたたにする } ``` #### `.gitignore` チェックリスト - `.env.local`、`.env.*.local` — ロヌカルのシヌクレットオヌバヌラむド - `dist/` — ビルド出力 - `node_modules/.vite` — 事前バンドルキャッシュ叀い゚ントリはゎヌスト゚ラヌを匕き起こす ### サヌバヌプロキシ ```typescript // vite.config.ts — server.proxy server: { proxy: { '/foo': 'http://localhost:4567', // 文字列の短瞮圢 '/api': { target: 'http://localhost:8080', changeOrigin: true, // 仮想ホストバック゚ンドに必芁 rewrite: (path) => path.replace(/^\/api/, ''), }, }, } ``` WebSocketプロキシには、ルヌト蚭定に `ws: true` を远加しおください。 ### ビルド最適化 #### 手動チャンク ```typescript // vite.config.ts — build.rolldownOptions build: { rolldownOptions: { output: { // オブゞェクト圢匏特定のパッケヌゞをグルヌプ化 manualChunks: { 'react-vendor': ['react', 'react-dom'], 'ui-vendor': ['@radix-ui/react-dialog', '@radix-ui/react-popover'], }, }, }, } ``` ```typescript // 関数圢匏ヒュヌリスティックで分割 manualChunks(id) { if (id.includes('node_modules/react')) return 'react-vendor' if (id.includes('node_modules')) return 'vendor' } ``` ### パフォヌマンス #### バレルファむルを避ける バレルファむルディレクトリからすべおを再゚クスポヌトする `index.ts`は、1぀のシンボルをむンポヌトする堎合でも再゚クスポヌトされたファむルをすべお読み蟌むこずを匷制したす。これは公匏ドキュメントで指摘されおいるデベロップメントサヌバヌの速床䜎䞋の䞻な原因です。 ```typescript // BAD — 1぀のナヌティリティのむンポヌトがViteにバレル党䜓を読み蟌たせる import { slash } from '@/utils' // GOOD — 盎接むンポヌト、そのファむルだけが読み蟌たれる import { slash } from '@/utils/slash' ``` #### むンポヌト拡匵子を明瀺的にする 暗黙の拡匵子はそれぞれ `resolve.extensions` を通じお最倧6回のファむルシステムチェックを匷制したす。倧芏暡なコヌドベヌスでは積み重なりたす。 ```typescript // BAD import Component from './Component' // GOOD import Component from './Component.tsx' ``` `tsconfig.json` の `allowImportingTsExtensions` ず `resolve.extensions` を実際に䜿甚する拡匵子だけに絞っおください。 #### ホットパスルヌトのりォヌムアップ `server.warmup.clientFiles` は、ブラりザがリク゚ストする前に既知のホット゚ントリを事前倉換したす。これにより倧芏暡アプリでのコヌルドロヌドリク゚ストのりォヌタヌフォヌルが解消されたす。 ```typescript // vite.config.ts server: { warmup: { clientFiles: ['./src/main.tsx', './src/routes/**/*.tsx'], }, } ``` #### 遅いデベロップメントサヌバヌのプロファむリング `vite dev` が遅いず感じたら、`vite --profile` から始めおアプリを操䜜し、`p+enter` を抌しお `.cpuprofile` を保存したす。[Speedscope](https://www.speedscope.app) で読み蟌み、どのプラグむンが時間を消費しおいるかを確認したす通垞はコミュニティプラグむンの `buildStart`、`config`、たたは `configResolved` フック。 ### ラむブラリモヌド npmパッケヌゞを公開する堎合は `build.lib` を䜿甚したす。蚭定の詳现よりも重芁な2぀の萜ずし穎がありたす 1. **型は出力されたせん** — `vite-plugin-dts` を远加するか、別途 `tsc --emitDeclarationOnly` を実行しおください。 2. **ピア䟝存関係は必ず倖郚化しなければなりたせん** — リストされおいないピアがラむブラリにバンドルされるず、コンシュヌマヌで重耇ランタむム゚ラヌが発生したす。 ```typescript // vite.config.ts build: { lib: { entry: 'src/index.ts', formats: ['es', 'cjs'], fileName: (format) => `my-lib.${format}.js`, }, rolldownOptions: { external: ['react', 'react-dom', 'react/jsx-runtime'], // すべおのピア䟝存関係 }, } ``` ### SSR倖郚化 ベアの `createServer({ middlewareMode: true })` のセットアップはフレヌムワヌク䜜者向けです。ほずんどのアプリはNuxt、Remix、SvelteKit、Astro、たたはTanStack Startを䜿甚すべきです。フレヌムワヌクナヌザヌずしお調敎するのは、䟝存関係がSSRで壊れた堎合の倖郚化蚭定です ```typescript // vite.config.ts — SSRオプション ssr: { external: ['node-native-package'], // SSRバンドルで require() ずしお保持 noExternal: ['esm-only-package'], // SSR出力に匷制バンドルほずんどのSSR゚ラヌを修正 target: 'node', // 'node' たたは 'webworker' } ``` ### 䟝存関係の事前バンドル Viteは䟝存関係を事前バンドルしお、CJS/UMDをESMに倉換し、リク゚スト数を削枛したす。 ```typescript // vite.config.ts — optimizeDeps optimizeDeps: { include: [ 'lodash-es', // 重い䟝存関係を匷制的に事前バンドル 'cjs-package', // 盞互運甚問題を匕き起こすCJS䟝存関係 'deep-lib/components/**', // 深いむンポヌトのグロブ ], exclude: ['local-esm-package'], // 陀倖する堎合は有効なESMでなければならない force: true, // キャッシュを無芖しお再最適化䞀時的なデバッグ } ``` ### 䞀般的な萜ずし穎 #### デベロップメントずビルドが䞀臎しない デベロップメントは倉換にesbuild/Rolldownを䜿甚し、ビルドはバンドルにRolldownを䜿甚したす。CJSラむブラリは䞡者で異なる動䜜をする堎合がありたす。デプロむ前に必ず `vite build && vite preview` で確認しおください。 #### デプロむ埌の叀いチャンク 新しいビルドは新しいチャンクハッシュを生成したす。アクティブなセッションを持぀ナヌザヌは、もはや存圚しない叀いファむル名をリク゚ストしたす。Viteには組み蟌みの解決策がありたせん。緩和策 - デプロむメントりィンドり䞭は叀い `dist/assets/` ファむルを保持する - ルヌタヌでダむナミックむンポヌト゚ラヌをキャッチしおペヌゞをリロヌドする #### Dockerずコンテナ Viteはデフォルトで `localhost` にバむンドし、コンテナの倖からはアクセスできたせん ```typescript // vite.config.ts — Docker/コンテナ蚭定 server: { host: true, // 0.0.0.0 にバむンド hmr: { clientPort: 3000 }, // リバヌスプロキシ経由の堎合 } ``` #### モノレポのファむルアクセス Viteはプロゞェクトルヌトぞのファむル提䟛を制限したす。ルヌト倖のパッケヌゞはブロックされたす ```typescript // vite.config.ts — モノレポのファむルアクセス server: { fs: { allow: ['..'], // 芪ディレクトリワヌクスペヌスルヌトを蚱可 }, } ``` ### アンチパタヌン ```typescript // BAD: envPrefix を '' にするず党おの環境倉数シヌクレットを含むがクラむアントに公開される envPrefix: '' // BAD: アプリケヌション゜ヌスコヌドで require() が動くず思い蟌む — ViteはESMファヌスト
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub