diff --git a/docs/config/dep-optimization-options.md b/docs/config/dep-optimization-options.md index 1a0f89be95c578..65b1ac4fb61d79 100644 --- a/docs/config/dep-optimization-options.md +++ b/docs/config/dep-optimization-options.md @@ -62,6 +62,21 @@ Certain options are omitted since changing them would not be compatible with Vit Set to `true` to force dependency pre-bundling, ignoring previously cached optimized dependencies. +## optimizeDeps.disabled + +- **Deprecated** +- **Experimental:** [Give Feedback](https://github.com/vitejs/vite/discussions/13839) +- **Type:** `boolean | 'build' | 'dev'` +- **Default:** `'build'` + +This option is deprecated. As of Vite 5.1, pre-bundling of dependencies during build have been removed. Setting `optimizeDeps.disabled` to `true` or `'dev'` disables the optimizer, and configured to `false` or `'build'` leaves the optimizer during dev enabled. + +Use `optimizeDeps.noDiscovery` instead to disallow automatic discovery of dependencies and leave `optimizeDeps.include` undefined or empty to disable completely the optimizer instead. + +:::warning +Optimizing dependencies during build time was an **experimental** feature. Projects trying out this strategy also removed `@rollup/plugin-commonjs` using `build.commonjsOptions: { include: [] }`. If you did so, a warning will guide you to re-enable it to support CJS only packages while bundling. +::: + ## optimizeDeps.needsInterop - **Experimental** diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index 0607943c1ccd58..61abeec060eef1 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -795,6 +795,13 @@ export async function resolveConfig( .map((hook) => hook(resolved)), ) + optimizeDepsDisabledBackwardCompatibility(resolved, resolved.optimizeDeps) + optimizeDepsDisabledBackwardCompatibility( + resolved, + resolved.ssr.optimizeDeps, + 'ssr.', + ) + debug?.(`using resolved config: %O`, { ...resolved, plugins: resolved.plugins.map((p) => p.name), @@ -1220,3 +1227,45 @@ export function isDepsOptimizerEnabled( const optimizeDeps = getDepOptimizationConfig(config, ssr) return !(optimizeDeps.noDiscovery && !optimizeDeps.include?.length) } + +function optimizeDepsDisabledBackwardCompatibility( + resolved: ResolvedConfig, + optimizeDeps: DepOptimizationConfig, + optimizeDepsPath: string = '', +) { + const optimizeDepsDisabled = optimizeDeps.disabled + if (optimizeDepsDisabled !== undefined) { + if (optimizeDepsDisabled === true || optimizeDepsDisabled === 'dev') { + const commonjsOptionsInclude = resolved.build?.commonjsOptions?.include + const commonjsPluginDisabled = + Array.isArray(commonjsOptionsInclude) && + commonjsOptionsInclude.length === 0 + optimizeDeps.noDiscovery = true + optimizeDeps.include = undefined + if (commonjsPluginDisabled) { + resolved.build.commonjsOptions.include = undefined + } + resolved.logger.warn( + colors.yellow(`(!) Experimental ${optimizeDepsPath}optimizeDeps.disabled and deps pre-bundling during build were removed in Vite 5.1. + To disable the deps optimizer, set ${optimizeDepsPath}optimizeDeps.noDiscovery to true and ${optimizeDepsPath}optimizeDeps.include as undefined or empty. + Please remove ${optimizeDepsPath}optimizeDeps.disabled from your config. + ${ + commonjsPluginDisabled + ? 'Empty config.build.commonjsOptions.include will be ignored to support CJS during build. This config should also be removed.' + : '' + } + `), + ) + } else if ( + optimizeDepsDisabled === false || + optimizeDepsDisabled === 'build' + ) { + resolved.logger.warn( + colors.yellow(`(!) Experimental ${optimizeDepsPath}optimizeDeps.disabled and deps pre-bundling during build were removed in Vite 5.1. + Setting it to ${optimizeDepsDisabled} now has no effect. + Please remove ${optimizeDepsPath}optimizeDeps.disabled from your config. + `), + ) + } + } +} diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index 5505b31a912b4d..90c2f99f68f46c 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -113,6 +113,16 @@ export interface DepOptimizationConfig { * @experimental */ extensions?: string[] + /** + * Deps optimization during build was removed in Vite 5.1. This option is + * now redundant and will be removed in a future version. Switch to using + * `optimizeDeps.noDiscovery` and an empty or undefined `optimizeDeps.include`. + * true or 'dev' disables the optimizer, false or 'build' leaves it enabled. + * @default 'build' + * @deprecated + * @experimental + */ + disabled?: boolean | 'build' | 'dev' /** * Automatic dependency discovery. When `noDiscovery` is true, only dependencies * listed in `include` will be optimized. The scanner isn't run for cold start