گزینههای بهینهسازی وابستگیها
- مرتبط: پیشباندل کردن وابستگیها
مگر اینکه ذکر شده باشه، گزینههای این بخش فقط به بهینهساز وابستگیها اعمال میشن که فقط در حالت توسعه استفاده میشه.
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 باشد، آن پوشه نادیده گرفته نخواهد شد.
optimizeDeps.exclude
- تایپ:
[]string
وابستگیهایی که باید از پیشباندل کردن مستثنا بشن.
CommonJS
وابستگیهای CommonJS نباید از بهینهسازی مستثنا بشن. اگه یه وابستگی ESM از بهینهسازی مستثنا بشه، اما یه وابستگی CommonJS تودرتو داشته باشه، اون وابستگی CommonJS باید به optimizeDeps.include اضافه بشه. مثال:
export default defineConfig({
optimizeDeps: {
include: ['esm-dep > cjs-dep'],
},
})optimizeDeps.include
- تایپ:
[]string
بهطور پیشفرض، پکیجهای لینکشدهای که داخل node_modules نیستن پیشباندل نمیشن. از این گزینه استفاده کنید تا یه پکیج لینکشده رو مجبور به پیشباندل شدن کنید.
آزمایشی: اگه از کتابخونهای با ایمپورتهای عمیق زیاد استفاده میکنید، میتونید یه الگوی گلوب انتهایی هم مشخص کنید تا همه ایمپورتهای عمیق رو یهجا پیشباندل کنه. این کار از پیشباندل مداوم هر بار که یه ایمپورت عمیق جدید استفاده میشه جلوگیری میکنه. بازخورد بدید. مثلاً:
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هم حذف شده، به جاش از گزینهoptimizeDeps.excludeدر Vite استفاده کنید.pluginsبا پلاگین وابستگی Vite ادغام میشن.
optimizeDeps.force
- تایپ:
boolean
اگه روی true تنظیم بشه، پیشباندل کردن وابستگیها رو اجباری میکنه و وابستگیهای بهینهشده کششده قبلی رو نادیده میگیره.
optimizeDeps.noDiscovery
- تایپ:
boolean - پیشفرض:
false
وقتی مقدار این گزینه روی true تنظیم شود، شناسایی خودکار وابستگیها غیرفعال میشود و فقط وابستگیهایی که در optimizeDeps.include ذکر شدهاند، بهینهسازی خواهند شد. وابستگیهایی که فقط بهصورت CommonJS (CJS-only) هستند، باید حتماً در طول توسعه در optimizeDeps.include قرار داشته باشند.
optimizeDeps.holdUntilCrawlEnd
- آزمایشی: بازخورد بدید
- تایپ:
boolean - پیشفرض:
true
وقتی فعال باشه، نتایج اولیه بهینهسازی وابستگیها رو تا وقتی که همه ایمپورتهای استاتیک موقع cold start بررسی بشن نگه میداره. این کار از نیاز به بارگذاری مجدد کل صفحه وقتی وابستگیهای جدید پیدا میشن و تکههای مشترک جدیدی تولید میکنن جلوگیری میکنه. اگه همه وابستگیها توسط اسکنر به علاوه اونایی که توی include صراحتاً تعریف شدن پیدا بشن، بهتره این گزینه رو غیرفعال کنید تا مرورگر درخواستهای بیشتری رو بهصورت موازی پردازش کنه.
optimizeDeps.disabled
- منسوخشده
- آزمایشی: بازخورد بدید
- تایپ:
boolean | 'build' | 'dev' - پیشفرض:
'build'
این گزینه منسوخ شده. از Vite 5.1، پیشباندل کردن وابستگیها موقع ساخت حذف شده. تنظیم optimizeDeps.disabled روی true یا 'dev' بهینهساز رو غیرفعال میکنه، و تنظیمش روی false یا 'build' بهینهساز رو توی توسعه فعال نگه میداره.
برای غیرفعال کردن کامل بهینهساز، از optimizeDeps.noDiscovery: true استفاده کنید تا کشف خودکار وابستگیها رو غیرمجاز کنید و optimizeDeps.include رو تعریفنشده یا خالی بذارید.
هشدار
بهینهسازی وابستگیها موقع ساخت یه ویژگی آزمایشی بود. پروژههایی که این استراتژی رو امتحان کردن، rollup/plugin-commonjs@ رو با استفاده از build.commonjsOptions: { include: [] } حذف کرده بودن. اگه این کار رو کردید، یه هشدار شما رو راهنمایی میکنه که دوباره فعالش کنید تا از پکیجهای فقط CJS موقع باندل کردن پشتیبانی بشه.
optimizeDeps.needsInterop
- آزمایشی
- تایپ:
[]string
وقتی این وابستگیها ایمپورت میشن، ESM interop رو اجباری میکنه. Vite معمولاً میتونه درست تشخیص بده که کی یه وابستگی به interop نیاز داره، پس این گزینه عموماً لازم نیست. اما ترکیبهای مختلف وابستگیها ممکنه باعث بشه بعضیهاشون متفاوت پیشباندل بشن. اضافه کردن این پکیجها به needsInterop میتونه شروع سرد رو با جلوگیری از بارگذاری مجدد کل صفحه سریعتر کنه. اگه این مورد برای یکی از وابستگیهاتون پیش بیاد، یه هشدار میگیرید که پیشنهاد میده اسم پکیج رو به این آرایه توی پیکربندیتون اضافه کنید.