From dc1195e13985104c5cda2a0dde1b9ba8a0403579 Mon Sep 17 00:00:00 2001 From: valadaptive Date: Wed, 13 Aug 2025 17:44:22 -0400 Subject: [PATCH] feat(preview): allow setting compression options --- docs/config/preview-options.md | 7 +++++++ packages/vite/src/node/preview.ts | 18 ++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/docs/config/preview-options.md b/docs/config/preview-options.md index acab6a3486cf8a..29a9dcb62ac089 100644 --- a/docs/config/preview-options.md +++ b/docs/config/preview-options.md @@ -96,3 +96,10 @@ See [`server.cors`](./server-options#server-cors) for more details. - **Type:** `OutgoingHttpHeaders` Specify server response headers. + +## preview.compression + +- **Type:** `CompressionOptions` +- Default: `{ threshold: 1024, level: -1, brotli: false, gzip: true, mimes: /text|javascript|\/json|xml/i }` + +Configure compression for files served by the preview server. See [`@polka/compression`](https://www.npmjs.com/package/@polka/compression#options) for more details. diff --git a/packages/vite/src/node/preview.ts b/packages/vite/src/node/preview.ts index 865b78adb91755..51073078c9f4f2 100644 --- a/packages/vite/src/node/preview.ts +++ b/packages/vite/src/node/preview.ts @@ -1,7 +1,9 @@ import fs from 'node:fs' import path from 'node:path' import sirv from 'sirv' -import compression from '@polka/compression' +import compression, { + type Options as CompressionOptions, +} from '@polka/compression' import connect from 'connect' import type { Connect } from 'dep-types/connect' import corsMiddleware from 'cors' @@ -46,10 +48,17 @@ import { } from './server/pluginContainer' import type { MinimalPluginContextWithoutEnvironment } from './plugin' -export interface PreviewOptions extends CommonServerOptions {} +export { type Options as CompressionOptions } from '@polka/compression' + +export interface PreviewOptions extends CommonServerOptions { + compression?: CompressionOptions +} export interface ResolvedPreviewOptions - extends RequiredExceptFor {} + extends RequiredExceptFor< + PreviewOptions, + 'host' | 'https' | 'proxy' | 'compression' + > {} export function resolvePreviewOptions( preview: PreviewOptions | undefined, @@ -68,6 +77,7 @@ export function resolvePreviewOptions( proxy: preview?.proxy ?? server.proxy, cors: preview?.cors ?? server.cors, headers: preview?.headers ?? server.headers, + compression: preview?.compression, } } @@ -224,7 +234,7 @@ export async function preview( app.use(proxyMiddleware(httpServer, proxy, config)) } - app.use(compression()) + app.use(compression(config.preview.compression)) // base if (config.base !== '/') {