---
url: /config/dep-optimization-options.md
---
# گزینه‌های بهینه‌سازی وابستگی‌ها

* **مرتبط:** [پیش‌باندل کردن وابستگی‌ها](/guide/dep-pre-bundling)

مگر اینکه ذکر شده باشه، گزینه‌های این بخش فقط به بهینه‌ساز وابستگی‌ها اعمال می‌شن که فقط در حالت توسعه استفاده می‌شه.

## optimizeDeps.entries

* **تایپ:** `[]string | string`

به‌طور پیش‌فرض، Vite همه فایل‌های `‎.html` شما رو بررسی می‌کنه تا وابستگی‌هایی که باید پیش‌باندل بشن رو پیدا کنه (با نادیده گرفتن `node_modules` ، `build.outDir` ، `__tests__‎` و `coverage`). اگه `build.rollupOptions.input` مشخص شده باشه، Vite به جای اون، اون نقاط ورود رو بررسی می‌کنه.

اگه هیچ‌کدوم از این‌ها نیاز شما رو برآورده نکنه، می‌تونید با این گزینه نقاط ورود سفارشی رو مشخص کنید - مقدار باید یه الگوی [`tinyglobby`](https://github.com/SuperchupuDev/tinyglobby) یا آرایه‌ای از الگوها باشه که نسبت به ریشه پروژه Vite هستن. این کار حدس نقاط ورود پیش‌فرض رو بازنویسی می‌کنه. وقتی `optimizeDeps.entries` به‌صراحت تعریف بشه، فقط پوشه‌های `node_modules` و `build.outDir` به‌طور پیش‌فرض نادیده گرفته می‌شن. اگه نیاز باشه پوشه‌های دیگه هم نادیده گرفته بشن، می‌تونید از الگوی نادیده‌گرفتن با علامت `!` در ابتدای لیست نقاط ورود استفاده کنید. توجه داشته باشید: اگر الگویی به‌طور صریح شامل رشته `node_modules` باشد، آن پوشه نادیده گرفته نخواهد شد.

## optimizeDeps.exclude

* **تایپ:** `[]string`

وابستگی‌هایی که باید از پیش‌باندل کردن مستثنا بشن.

::: warning CommonJS
وابستگی‌های CommonJS نباید از بهینه‌سازی مستثنا بشن. اگه یه وابستگی ESM از بهینه‌سازی مستثنا بشه، اما یه وابستگی CommonJS تودرتو داشته باشه، اون وابستگی CommonJS باید به `optimizeDeps.include` اضافه بشه. مثال:

```js twoslash
import { defineConfig } from 'vite'
// ---cut---
export default defineConfig({
  optimizeDeps: {
    include: ['esm-dep > cjs-dep'],
  },
})
```

:::

## optimizeDeps.include

* **تایپ:** `[]string`

به‌طور پیش‌فرض، پکیج‌های لینک‌شده‌ای که داخل `node_modules` نیستن پیش‌باندل نمی‌شن. از این گزینه استفاده کنید تا یه پکیج لینک‌شده رو مجبور به پیش‌باندل شدن کنید.

**آزمایشی:** اگه از کتابخونه‌ای با ایمپورت‌های عمیق زیاد استفاده می‌کنید، می‌تونید یه الگوی گلوب انتهایی هم مشخص کنید تا همه ایمپورت‌های عمیق رو یه‌جا پیش‌باندل کنه. این کار از پیش‌باندل مداوم هر بار که یه ایمپورت عمیق جدید استفاده می‌شه جلوگیری می‌کنه. [بازخورد بدید](https://github.com/vitejs/vite/discussions/15833). مثلاً:

```js twoslash
import { defineConfig } from 'vite'
// ---cut---
export default defineConfig({
  optimizeDeps: {
    include: ['my-lib/components/**/*.vue'],
  },
})
```

## optimizeDeps.esbuildOptions

* **تایپ:** [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys)`<`[`EsbuildBuildOptions`](https://esbuild.github.io/api/#general-options)`,
  | '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

* **آزمایشی:** [بازخورد بدید](https://github.com/vitejs/vite/discussions/15834)
* **تایپ:** `boolean`
* **پیش‌فرض:** `true`

وقتی فعال باشه، نتایج اولیه بهینه‌سازی وابستگی‌ها رو تا وقتی که همه ایمپورت‌های استاتیک موقع cold start بررسی بشن نگه می‌داره. این کار از نیاز به بارگذاری مجدد کل صفحه وقتی وابستگی‌های جدید پیدا می‌شن و تکه‌های مشترک جدیدی تولید می‌کنن جلوگیری می‌کنه. اگه همه وابستگی‌ها توسط اسکنر به علاوه اونایی که توی `include` صراحتاً تعریف شدن پیدا بشن، بهتره این گزینه رو غیرفعال کنید تا مرورگر درخواست‌های بیشتری رو به‌صورت موازی پردازش کنه.

## optimizeDeps.disabled

* **منسوخ‌شده**
* **آزمایشی:** [بازخورد بدید](https://github.com/vitejs/vite/discussions/13839)
* **تایپ:** `boolean | 'build' | 'dev'‎`
* **پیش‌فرض:** `'build'`

این گزینه منسوخ شده. از Vite 5.1، پیش‌باندل کردن وابستگی‌ها موقع ساخت حذف شده. تنظیم `optimizeDeps.disabled` روی `true` یا `'dev'` بهینه‌ساز رو غیرفعال می‌کنه، و تنظیمش روی `false` یا `'build'` بهینه‌ساز رو توی توسعه فعال نگه می‌داره.

برای غیرفعال کردن کامل بهینه‌ساز، از `optimizeDeps.noDiscovery: true` استفاده کنید تا کشف خودکار وابستگی‌ها رو غیرمجاز کنید و `optimizeDeps.include` رو تعریف‌نشده یا خالی بذارید.

::: warning هشدار
بهینه‌سازی وابستگی‌ها موقع ساخت یه ویژگی **آزمایشی** بود. پروژه‌هایی که این استراتژی رو امتحان کردن، `rollup/plugin-commonjs@` رو با استفاده از `build.commonjsOptions: { include: [] }` حذف کرده بودن. اگه این کار رو کردید، یه هشدار شما رو راهنمایی می‌کنه که دوباره فعالش کنید تا از پکیج‌های فقط CJS موقع باندل کردن پشتیبانی بشه.
:::

## optimizeDeps.needsInterop

* **آزمایشی**
* **تایپ:** `[]string`

وقتی این وابستگی‌ها ایمپورت می‌شن، ESM interop رو اجباری می‌کنه. Vite معمولاً می‌تونه درست تشخیص بده که کی یه وابستگی به interop نیاز داره، پس این گزینه عموماً لازم نیست. اما ترکیب‌های مختلف وابستگی‌ها ممکنه باعث بشه بعضی‌هاشون متفاوت پیش‌باندل بشن. اضافه کردن این پکیج‌ها به `needsInterop` می‌تونه شروع سرد رو با جلوگیری از بارگذاری مجدد کل صفحه سریع‌تر کنه. اگه این مورد برای یکی از وابستگی‌هاتون پیش بیاد، یه هشدار می‌گیرید که پیشنهاد می‌ده اسم پکیج رو به این آرایه توی پیکربندی‌تون اضافه کنید.
