コンテンツにスキップ
svelte-vitals
日本語
Esc
移動開く⌘Jプレビュー
このページの内容

performance/minify-disabled · Minification disabled

vite.config に build.minify:false が残っていると、ミニファイされていない JS/CSS がそのまま本番に配信されます。

重大度: warning · カテゴリ: performance

チェック内容

本番ビルドのミニファイを build.minify: false で無効化している Vite 設定を検出します。

CLI は vite.config.*(Vite 自身の解決順で最初のファイル)を静的解析し、satisfiesas を外したうえで次のリテラル形式を検出します。

  • export default { … }
  • defineConfig({ … })(同一ファイル内の識別子を引数に渡す形も含む)
  • 同一ファイル内のエイリアスエクスポート
  • CommonJS の module.exports = { … }

Vite プラグインは vite build 中に解決済みの設定値を読むため、関数形式や条件分岐の設定も検出でき、実際のビルドに適用されないオーバーライドを誤検知することもありません。

検出しないもの: minify: 'oxc' | 'esbuild' | 'terser' | truebuild オブジェクト外の minify キー。Vite 設定を持たないプロジェクトは CLI では検出しません(解析対象がないため)。プラグイン側は解決済みの値で判定するので、設定ファイルを介さないインラインの設定も対象です。

リテラルの後にオブジェクトスプレッドがあり minify を上書きしうる場合({ minify: false, ...prod })、CLI からは値を判定できないため保守的に見送ります。プラグインチャネルは解決済みの値で判定するため、この場合も検出できます。

なぜ重要か

Vite はデフォルトでミニファイを行います(Vite 8 以降は oxc)。これを無効化する設定は、本番の問題をデバッグした際の消し忘れであることがほとんどです。ミニファイされていないバンドルは数倍のサイズになり、すべてのルートでダウンロードとパースに余計な時間がかかります。しかもツールチェーンは何も警告しません。ビルドは成功し、開発時の挙動も変わらないためです。

修正方法

オーバーライドを削除する(デフォルトでミニファイされます)か、本番ではミニファイが維持されるようにスコープを限定します。

import { defineConfig } from 'vite';

export default defineConfig(({ mode }) => ({
  build: {
    minify: mode === 'production'
  }
}));

CLI の静的解析はこの条件分岐形式を意図的にスキップします。実際のビルドがどちらの分岐を通るかを検証できるのは、解決済みの値を見るプラグインチャネルだけです。

モードによる違い

2つのチャネルには検出力の差があります。CLI はリテラルの build.minify: false だけを検出し、false に評価される動的な式は見えません。

Vite プラグインは解決済みの値で判定するため、実行されたビルドに対する判定は正確です。ただし設定が動的な場合やオーバーライドが別プラグイン由来の場合は行を特定できないため、行番号は付かず、実際のビルドから解決した値である旨がメッセージに出ます。設定ファイルを介さないインラインの設定では、ファイル名も付きません。

無効化

意図してミニファイせずに本番へ出している場合は、設定でルールを無効化してください。

export default {
  rules: {
    'performance/minify-disabled': 'off'
  }
};