又一個驗證器,而不是又一個轉換器
設定的失敗方式很難看見:`plugins: [vue()]` 配上一個從未加入 `@vitejs/plugin-vue` 的 package.json,在你的機器上跑得動,因為它是全域安裝的,然後在 CI 上壞掉。`define: { __VERSION__: "1.0.0" }` 會把識別字換成 `1.0.0`——一個數字,而不是你想要的字串。`envPrefix: ""` 會悄悄把每一個環境變數都暴露給客戶端 bundle,連密鑰也一起。
這些都不需要跑一次建置才找得到;只需要把設定與 manifest 並排放在一起。這正是這個頁面在做的事——以靜態方式進行,什麼都不執行:
- 它用比的,不用猜。 設定 import 的每一個外掛都會到 dependencies 與 devDependencies 裡查;optimizeDeps.include 列出的每一個套件都會拿 manifest 核對;有 Vue 相依套件卻沒有 import @vitejs/plugin-vue 會被回報。每一項都是確定性的檢查,並附上觸發它的證據——所以你可以不同意工具,而且看得到為什麼。
- 它知道自己不知道什麼。 你的路由模式、你的部署路徑,以及那個密鑰是不是真的是密鑰,都不在這兩個檔案裡。這些會以說明形式回來,寫成「檢查一下這個」,而不是錯誤——一個會捏造確定性的檢查器,比沒有檢查器更糟。
- 會吃掉你一個下午的陷阱。 沒有用 JSON.stringify 包起來的 define 值、悄悄勝出的重複頂層鍵、已經不存在的 optimizeDeps 項目、留在共用代理規則裡的 secure: false、朝著正式環境去的 sourcemap: true、在專案根目錄之外又少了 emptyOutDir 的 outDir。
什麼都不會執行,什麼都不會上傳:分析是文字層面的,所以它可以在你還在編輯的設定上運作,也不可能代替你執行任何東西。兩點誠實的限制——它抓不到語法有效、但對你的應用語意錯誤的設定(base 與部署路徑不符在這裡只是一則說明),它也不會解析外掛版本,所以 Vite 主版本與某個外掛主版本不相符時不會被回報。它就是你送 PR 前會做的那一次審閱,只是每次都做得一樣。