依賴項優化選項
- 相關: 依賴項預先打包
除非另有說明,本節中的選項僅適用於依賴項優化器,該優化器僅在開發環境中使用。
optimizeDeps.entries
- 類型:
string | string[]
預設情況下,Vite 將爬取所有 .html
檔案,以偵測需要預先打包的依賴項(忽略 node_modules
、build.outDir
、__tests__
和 coverage
)。如果指定了 build.rollupOptions.input
,Vite 將改為爬取這些進入點。
如果這些都不符合您的需求,您可以使用此選項指定自訂進入點 - 該值應為 tinyglobby
模式或模式陣列,這些模式相對於 Vite 專案根目錄。這將覆蓋預設進入點推斷。當明確定義 optimizeDeps.entries
時,預設只會忽略 node_modules
和 build.outDir
資料夾。如果需要忽略其他資料夾,您可以使用初始為 !
的忽略模式作為進入點清單的一部分。如果您不想忽略 node_modules
和 build.outDir
,您可以使用文字字串路徑(不使用 tinyglobby
模式)來指定。
optimizeDeps.exclude
- 類型:
string[]
從預先打包中排除的依賴項。
CommonJS
CommonJS 依賴項不應從優化中排除。如果一個 ESM 依賴項從優化中排除,但有一個巢狀的 CommonJS 依賴項,則應將 CommonJS 依賴項新增到 optimizeDeps.include
。範例
export default defineConfig({
optimizeDeps: {
include: ['esm-dep > cjs-dep'],
},
})
optimizeDeps.include
- 類型:
string[]
預設情況下,不在 node_modules
內的連結套件不會預先打包。使用此選項強制預先打包連結套件。
實驗性: 如果您正在使用具有許多深層匯入的函式庫,您也可以指定尾隨的 glob 模式以一次預先打包所有深層匯入。這將避免每當使用新的深層匯入時不斷進行預先打包。提供意見。例如
export default defineConfig({
optimizeDeps: {
include: ['my-lib/components/**/*.vue'],
},
})
optimizeDeps.esbuildOptions
- 類型:
Omit
<
EsbuildBuildOptions
, | 'bundle' | 'entryPoints' | 'external' | 'write' | 'watch' | 'outdir' | 'outfile' | 'outbase' | 'outExtension' | 'metafile'>
在依賴項掃描和優化期間傳遞給 esbuild 的選項。
某些選項被省略,因為更改它們將與 Vite 的依賴項優化不相容。
external
也被省略,請使用 Vite 的optimizeDeps.exclude
選項plugins
會與 Vite 的依賴項外掛合併
optimizeDeps.force
- 類型:
boolean
設定為 true
以強制進行依賴項預先打包,忽略先前快取的優化依賴項。
optimizeDeps.holdUntilCrawlEnd
- 實驗性: 提供意見
- 類型:
boolean
- 預設值:
true
啟用時,它會保留第一個優化依賴項的結果,直到在冷啟動時爬取所有靜態匯入。這避免了在發現新依賴項並觸發產生新的通用區塊時需要重新載入整個頁面。如果掃描器找到了所有依賴項,加上 include
中明確定義的依賴項,最好停用此選項,以讓瀏覽器並行處理更多請求。
optimizeDeps.disabled
- 已棄用
- 實驗性: 提供意見
- 類型:
boolean | 'build' | 'dev'
- 預設值:
'build'
此選項已棄用。從 Vite 5.1 開始,建置期間的依賴項預先打包已被移除。將 optimizeDeps.disabled
設定為 true
或 'dev'
會停用優化器,並設定為 false
或 'build'
會在開發期間啟用優化器。
若要完全停用優化器,請使用 optimizeDeps.noDiscovery: true
以不允許自動探索依賴項,並將 optimizeDeps.include
保留為未定義或空白。
警告
在建置期間優化依賴項是一個實驗性功能。嘗試此策略的專案也會使用 build.commonjsOptions: { include: [] }
移除 @rollup/plugin-commonjs
。如果您這樣做了,警告將引導您重新啟用它,以在打包時支援僅限 CJS 的套件。
optimizeDeps.needsInterop
- 實驗性
- 類型:
string[]
在匯入這些依賴項時強制執行 ESM 互通性。Vite 能夠正確偵測何時依賴項需要互通性,因此通常不需要此選項。但是,不同的依賴項組合可能會導致其中一些依賴項以不同的方式進行預先打包。將這些套件新增到 needsInterop
可以透過避免重新載入整個頁面來加速冷啟動。如果您的其中一個依賴項屬於這種情況,您將收到警告,建議您將套件名稱新增到配置中的此陣列。