Vite 8
Vite 8.x、https://vite.dev/guide/ より。各記述の末尾に出典ページが記載されています。
ナビゲーション方法
- 以下のクイックルールを読んでください。最も頻繁なミスを防げます。
- タスクに一致するリファレンスファイルを、最後の表から1つ開いてください。
rollupOptions、esbuild、manualChunksについては、最初にreferences/migration.mdを読んでください。
クイックスタート
// vite.config.ts
import { defineConfig, loadEnv } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '') // .envファイルはここでは process.env に入っていません
return {
plugins: [react()],
server: { port: Number(env.PORT ?? 5173), strictPort: true },
build: {
rolldownOptions: { output: { /* Rolldownオプション。Rollupではありません */ } },
},
}
})
{ "compilerOptions": { "types": ["vite/client"], "isolatedModules": true } }
- Node.js 20.19+ または 22.12+。
npm create vite@latest my-app -- --template react-tsでスキャフォールドします。https://vite.dev/guide/ - スクリプト:
vite(開発、ポート5173)、vite build、vite preview(ポート4173、ローカル確認専用。決してプロダクションサーバーではありません)。https://vite.dev/guide/cli 、https://vite.dev/config/preview-options - Viteは型チェックを行いません。
tsc --noEmitを併用してください。https://vite.dev/guide/features#transpile-only
クイックルール
ツールチェーンと設定
- Rolldownがビルドと依存関係の事前バンドルを行います。OxcがJavaScriptの変換と圧縮を、Lightning CSSがCSSの圧縮を行います。https://vite.dev/guide/why#a-unified-toolchain 、https://vite.dev/guide/migration#dependency-optimizer-now-uses-rolldown 、https://vite.dev/guide/migration#javascript-transforms-by-oxc 、https://vite.dev/guide/migration#css-minification-by-lightning-css
build.rolldownOptions、worker.rolldownOptions、optimizeDeps.rolldownOptions、oxcを使用してください。rollupOptions、esbuildOptions、esbuildキーは非推奨です。https://vite.dev/guide/migration#other-related-deprecations 、https://vite.dev/guide/migration#javascript-transforms-by-oxc- エントリはトップレベルの
inputオプションで宣言します。これはbuild.rolldownOptions.input、build.lib.entry、optimizeDeps.entriesのデフォルトです。https://vite.dev/config/shared-options#input - チャンク分割は
build.rolldownOptions.output.codeSplittingで行います。manualChunksではありません。https://vite.dev/guide/build#chunking-strategy tsconfigのtargetは無視されます:build.targetを設定してください(デフォルトは'baseline-widely-available')。Viteはポリフィルを追加しないため、@vitejs/plugin-legacyを使用してください。https://vite.dev/guide/features#target 、https://vite.dev/config/build-options#build-target 、https://vite.dev/guide/build#browser-compatibility- Oxcはネイティブデコレータのダウンレベル変換やプロパティのマングリングができません。
@を含むファイルに限定したBabelまたはSWCを追加してください。https://vite.dev/guide/migration#javascript-transforms-by-oxc 、https://vite.dev/guide/migration#javascript-minification-by-oxc - CommonJSからのデフォルトインポートが、
module.exports全体を返す場合があります(「got: object」、「is not a function」)。https://vite.dev/guide/migration#consistent-commonjs-interop 、https://vite.dev/guide/troubleshooting#default-import-unexpectedly-returns-an-object
環境変数とモード
VITE_で始まる変数だけがクライアントコードに到達します。常に文字列としてバンドルにインライン化されます。シークレットは絶対に置かず、envPrefix: ''も設定しないでください。https://vite.dev/guide/env-and-mode#env-variables 、https://vite.dev/config/shared-options#envprefix.envファイルは設定の実行後に読み込まれます。vite.config内ではloadEnv(mode, root, '')を使用してください。https://vite.dev/config/#using-environment-variables-in-config- シェル環境変数は
.envファイルより優先されます。.envの編集後は再起動が必要です。https://vite.dev/guide/env-and-mode#env-files --modeとNODE_ENVは独立しています:vite build --mode stagingでもプロダクションビルドです。https://vite.dev/guide/env-and-mode#node-env-and-modesimport.meta.env.BASE_URLはリテラルで記述してください。ブラケット形式は置き換えられません。https://vite.dev/guide/build#public-base-path
開発サーバー
server.allowedHosts: trueやserver.cors: trueは絶対に設定しないでください。どのWebサイトでもあなたのソースを読み取れてしまいます。https://vite.dev/config/server-options#server-allowedhosts 、https://vite.dev/config/server-options#server-cors- 使用中のポートは、
strictPort: trueが設定されていない限り、自動的に次のポートに移動します。https://vite.dev/config/server-options#server-port - WebSocketの設定は
server.wsにあります。server.hmrはboolean | { overlay }のみ保持します。https://vite.dev/config/server-options#server-hmr npm link後、またはリンクした依存関係を編集した後は、vite --forceで再起動してください。https://vite.dev/guide/troubleshooting#outdated-pre-bundled-deps-when-linking-to-a-local-package- HMRの代わりにフルリロードが発生する場合、循環依存が原因かもしれません(
vite --debug hmrで確認)。https://vite.dev/guide/troubleshooting#a-full-reload-happens-instead-of-hmr
ビルドとデプロイ
- HTMLを
Cache-Control: no-cacheで配信し、vite:preloadErrorでリロードしてください。そうしないと、デプロイ後に古いページが壊れることがあります。https://vite.dev/guide/build#load-error-handling import.meta.globの引数はリテラルである必要があります。動的なimport()は./、../、または#で始まり、ファイル拡張子で終わる必要があります:import(`./dir/${name}.js`)。https://vite.dev/guide/features#glob-import-caveats 、https://vite.dev/guide/features#dynamic-import- CSSを文字列としてインポート:
import css from './a.css?inline'。.cssのデフォルトインポートは廃止されました。https://vite.dev/guide/features#disabling-css-injection-into-the-page - ライブラリモードでは
import.meta.env.*は静的に置き換えられますが、process.env.*はそのまま残ります。https://vite.dev/guide/build#library-mode
プラグイン、HMR、SSR
- フックフィルターを使用します:
transform: { filter: { id: /\\.ext$/ }, handler }。非JSを変換する場合はmoduleType: 'js'を返します。https://vite.dev/guide/api-plugin#hook-filters 、https://vite.dev/guide/migration#module-type-support-and-auto-detection - フック内では
ssrフラグではなくthis.environmentを使用してください。hotUpdateはhandleHotUpdateの環境対応版で、handleHotUpdateの非推奨化は将来のメジャーバージョンで計画されています。https://vite.dev/guide/api-environment-plugins#accessing-the-current-environment-in-hooks 、https://vite.dev/changes/hotupdate-hook configureServerのミドルウェアはViteの前に実行されます。後に実行する関数を返すこともできます。https://vite.dev/guide/api-plugin#configureserverimport.meta.hot.accept(はif (import.meta.hot)の中でリテラルとして記述してください。https://vite.dev/guide/api-hmr#hot-accept-cb- SSR開発:
server.middlewareMode: trueとappType: 'custom'を設定し、server.environments.ssr.runner.import()でエントリを読み込みます(ssrLoadModuleは非推奨予定)。https://vite.dev/guide/ssr#setting-up-the-dev-server 、https://vite.dev/guide/api-environment-frameworks#runnabledevenvironment 、https://vite.dev/changes/ssr-using-modulerunner vite buildはクライアントのみをビルドします。vite build --appはすべての環境をビルドします。https://vite.dev/guide/api-environment-frameworks#environments-during-build
古いパターン
| 古いパターン | 現在のパターン |
|---|---|
build.rollupOptions | build.rolldownOptions |
esbuild: { jsx..., jsxInject } | oxc: { jsx: {...}, jsxInject } |
optimizeDeps.esbuildOptions | optimizeDeps.rolldownOptions |
output.manualChunks | output.codeSplitting |
server.hmr.port、clientPort | server.ws.port、clientPort |
build.polyfillModulePreload | build.modulePreload.polyfill |
import s from './a.css' | import s from './a.css?inline' |
import.meta.hot.decline() (何もしない) | import.meta.hot.invalidate() |
server.ssrLoadModule(url) | environment.runner.import(url) |
handleHotUpdate + server.ws.send | hotUpdate + this.environment.hot.send |
リファレンスファイル
| ファイル | 参照するタイミング |
|---|---|
| references/migration.md | Vite 7から8への移行: リネームされたオプション、CommonJS相互運用、削除された機能 |
| references/config-and-env.md | 設定、loadEnv、import.meta.env、モード、base |
| references/code-features.md | TypeScript、JSX、HTML、CSS、アセット、import.meta.glob、動的インポート、ワーカー、WebAssembly |
| references/dev-server.md | ホスト、ポート、allowedHosts、CORS、プロキシ、ミドルウェアモード、プレビュー |
| references/dependencies-and-performance.md | 事前バンドル、optimizeDeps、リンクされたパッケージ、開発速度 |
| references/build.md | ターゲット、rolldownOptions、チャンク、ライブラリモード |
| references/backend-integration-and-deploy.md | バックエンド統合、マニフェスト、静的ホスティング |
| references/ssr.md | SSR開発サーバー、プロダクションビルド、外部化、プラグイン |
| references/plugins.md | プラグインフック、フィルター、仮想モジュール、順序 |
| references/hmr-and-javascript-api.md | import.meta.hot、カスタムイベント、createServer、build、preview |
| references/environment-api.md | environments 設定、this.environment、configEnvironment、環境ごとの状態 |
| references/environment-frameworks.md | builder.buildApp、ModuleRunner |
参照したページ: SOURCES.md。