OpenSource-Hub

vite

CLI ツール

vitejs/vite

次世代フロントエンドビルドツール、超高速ホットリロード。

概要

Vite は、ネイティブ ES モジュールに基づく高速な開発サーバーと超高速なホットモジュールリプレースメント(HMR)を提供するビルドツールです。Rolldown による最適化されたプロダクションビルドを実現し、豊富なプラグインシステムをサポートすることで拡張性を高めています。

README プレビュー

\n  \n  \n  \n    \n      \n      \n      \n    \n  \n  \n  \n\n\n\n  \n  \n  \n  \n  \n\n\n\n# Vite ⚡\n\n> Next Generation Frontend Tooling\n\n- 💡 Instant Server Start\n- ⚡️ Lightning Fast HMR\n- 🛠️ Rich Features\n- 📦 Optimized Build\n- 🔩 Universal Plugin Interface\n- 🔑 Fully Typed APIs\n\nVite (French word for "quick", pronounced [`/viːt/`](https://cdn.jsdelivr.net/gh/vitejs/vite@main/docs/public/vite.mp3), like "veet") is a build tool that aims to provide a faster and leaner development experience for modern web projects. It consists of two major parts:\n\n- A dev server that provides [rich feature enhancements](https://vite.dev/guide/features) over [native ES modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules), for example extremely fast [Hot Module Replacement (HMR)](https://vite.dev/guide/features#hot-module-replacement).\n\n- A build command that bundles your code with [Rolldown](https://rolldown.rs), pre-configured to output highly optimized static assets for production.\n\nIn addition, Vite is highly extensible via its [Plugin API](https://vite.dev/guide/api-plugin.html) and [JavaScript API](https://vite.dev/guide/api-javascript.html) with full typing support.\n\n[Read the Docs to Learn More](https://vite.dev).\n\n## Packages\n\n| Package                                         | Version (click for changelogs)                                                                                                    |\n| ----------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------- |\n| [vite](packages/vite)                           | [](packages/vite/CHANGELOG.md)                                    |\n| [@vitejs/plugin-legacy](packages/plugin-legacy) | [](packages/plugin-legacy/CHANGELOG.md) |\n| [create-vite](packages/create-vite)             | [](packages/create-vite/CHANGELOG.md)               |\n\n## Contributio

FAQ (5)

トラブル対応
Viteのdev serverがserver.restart()の繰り返し呼び出しでメモリリークするのはなぜか、またどうすれば修正できるか?

Vite 8.x は、各 server.restart() の後も、サーバーの init/listen クロージャが options オブジェクトを到達可能な状態に保つため、options.previousEnvironments を通じて廃棄された環境とそのモジュールグラフを保持し続けます。これは再起動をまたいで連鎖し、数百 MB のヒープを保持する可能性があり、最終的に Node のヒープ枯渇を引き起こします。修正: _createServer (packages/vite/src/node/server/index.ts) において、await された環境の初期化が完了した後、初期化専用の参照をクリアします: options.previousEnvironments = undefined。その時点では、以前のインスタンスはすでに各環境の init に渡されているため、これは安全です。Vite 8.3.0 および 8.1.4 で Node 22/24/26 を使用して検証済み: 廃棄された環境の保持数が 8/8 から 0/8 に減少します。なお、リークを完全に測定するには、Rolldown (#10887) に存在する別の独立したメモリ保持のバグにもパッチを適用する必要があることに注意してください。

参照 Issue #23493
トラブル対応
resolve.tsconfigPathsを有効にしたVite 8開発サーバーで'Tsconfig not found'エラーを修正する方法は?

これは、Vite の dev server が合成されたデフォルトの importer(<root>/index.html)を使用する際に発生します。この importer はどの tsconfig の include にもマッチしないため、tsconfig の自動検出が親ディレクトリの tsconfig.json まで遡ってしまい、その extends を解決できなくなります(ネストされた git worktrees や React Router framework mode でよく見られます)。回避策: Vite の設定でトップレベルの tsconfig オプションを明示的に設定し、検出をプロジェクトの設定に固定してください:

// vite.config.ts
export default defineConfig({
  tsconfig: './tsconfig.json',
  resolve: { tsconfigPaths: true },
})

または、親ディレクトリの tsconfig.json を削除または修正してください(例:親側で不足している @tsconfig/strictest などの extends パッケージをインストールします)。このバグは vite dev と、react-router build/react-router dev のように importer なしで transformRequest() を呼び出すツールに影響します。

参照 Issue #23672
トラブル対応
Vite の experimental.bundledDev で 'factory.fn is not a function' または "Cannot read properties of undefined (reading 'exports')" エラーを修正する方法

これはバージョンの不一致です: Vite 8.2.4 にバンドルされている dev クライアントは rolldown 1.2.4 の DevRuntime をインライン化していますが、rolldown >= 1.2.6 では静的インポートに対する dev の emission が変更されたため、古い runtime では新しい出力を実行できません。修正方法: Vite を 8.3.5 以降にアップグレードしてください(npm install vite@^8.3.5)。これにより DevRuntime がインストール済みの rolldown から読み込まれるようになり、emitter と runtime の同期が保たれます。Vite 8.2.4 を使い続けなければならない場合の回避策: rolldown を 1.2.5 に固定してください(npm install rolldown@1.2.5、または package.json で override を指定)。1.2.5 の emission はインライン化された runtime と依然として一致するためです。

参照 Issue #23921
トラブル対応
Yarn 4 で `nodeLinker: pnpm` を使用している場合に、`yarn install` 後に Vite が依存関係を再バンドルしない問題を修正するにはどうすればよいですか?

これは、nodeLinker: pnpm を指定した Yarn 4 が node_modules/.yarn-state.yml も .pnp.cjs も生成しないために発生します。そのため Vite は空のロックファイル(lockfileHash: e3b0c442...)をハッシュし、古い事前バンドル済みの依存関係を使い続けてしまいます。

一時的な回避策:

npx vite --force

または、開発サーバーを起動する前に Vite の依存関係キャッシュを削除します:

rm -rf node_modules/.vite/deps && npx vite

自動化された回避策としては、postinstall スクリプトを追加できます:

{
  "scripts": {
    "postinstall": "rm -rf node_modules/.vite/deps"
  }
}

恒久的な修正:packages/vite/src/node/optimizer/index.ts 内の Vite の lockfileFormats にパッチを適用し、既存の Yarn エントリの後でソースのロックファイルにフォールバックするようにします:

{ path: 'yarn.lock', checkPatchesDir: '.yarn/patches', manager: 'yarn' }

あるいは、fix(optimizer): fall back to yarn.lock for lockfile hash の変更を含むリリースに Vite をアップグレードしてください。

参照 Issue #23666
トラブル対応
Windows で Vite 開発サーバーが 'EBUSY: resource busy or locked, watch' エラーでクラッシュする問題を修正する方法

根本原因:Vite の dev server は chokidar の change/add/unlink イベントは購読しているものの error は購読していないため、watcher の障害(一時的にロックされたファイルによる EBUSY、EPERM、ENOSPC、inotify の割り当て枯渇)はすべてキャッチされない例外となり、プロセス全体を強制終了させてしまう。Node 24.16.0 以降ではこの問題ははるかに発生しやすい。libuv 1.52 から監視対象のファイルを読み取りアクセスで開くようになったためである(典型的なトリガー:Vite のルート内に ASP.NET の bin/ フォルダがあり、コンパイル直後の DLL がまだロックされているケース)。コアの修正がリリースされるまでの回避策:

1) vite.config.js でプラグインを介して独自のエラーハンドラをアタッチする:

export default {
  plugins: [{
    name: 'watcher-error-guard',
    configureServer(server) {
      server.watcher.on('error', (err) => console.error('Watcher error (ignored):', err))
    }
  }]
}

2) ロックされているビルド出力を除外し、chokidar がそれに対して fs.watch() を呼び出さないようにする:

export default { server: { watch: { ignored: ['**/bin/**', '**/obj/**'] } } }

3) Node を 24.16.0 未満(libuv < 1.52)に固定して、書き込まれたばかりでまだロックされているファイルによる EBUSY のトリガーを回避する。

適切な修正(Vite が FSWatcher に error リスナーをアタッチする)は現在作業中であり、上流の libuv のリグレッションは libuv/libuv#5270 で追跡されている。

参照 Issue #23470