From aaf2f7b8b6731899fc0eb33492ea0018a942814e Mon Sep 17 00:00:00 2001 From: cyco130 Date: Sun, 18 Dec 2022 12:41:53 +0300 Subject: [PATCH] feat: add experimental option to skip SSR transform --- packages/vite/src/node/config.ts | 19 ++++++++++++++++--- .../vite/src/node/server/transformRequest.ts | 15 ++++++++------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index a78079b0b57386..7885f264f6e974 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -292,6 +292,14 @@ export interface ExperimentalOptions { * @default false */ hmrPartialAccept?: boolean + /** + * Skips SSR transform to make it easier to use Vite with Node ESM loaders. + * @warning Enabling this will break normal operation of Vite's SSR in development mode. + * + * @experimental + * @default false + */ + skipSsrTransform?: boolean } export interface LegacyOptions { @@ -462,13 +470,18 @@ export async function resolveConfig( ) const clientAlias = [ - { find: /^\/?@vite\/env/, replacement: ENV_ENTRY }, - { find: /^\/?@vite\/client/, replacement: CLIENT_ENTRY }, + { find: /^\/?@vite\/env/, replacement: () => ENV_ENTRY }, + { find: /^\/?@vite\/client/, replacement: () => CLIENT_ENTRY }, ] // resolve alias with internal client alias const resolvedAlias = normalizeAlias( - mergeAlias(clientAlias, config.resolve?.alias || []), + mergeAlias( + // @ts-expect-error because @rollup/plugin-alias' type doesn't allow function + // replacement, but its implementation does work with function values. + clientAlias, + config.resolve?.alias || [], + ), ) const resolveOptions: ResolvedConfig['resolve'] = { diff --git a/packages/vite/src/node/server/transformRequest.ts b/packages/vite/src/node/server/transformRequest.ts index f10cfde5ac3b87..fb64c190cce7f6 100644 --- a/packages/vite/src/node/server/transformRequest.ts +++ b/packages/vite/src/node/server/transformRequest.ts @@ -266,13 +266,14 @@ async function loadAndTransform( } } - const result = ssr - ? await server.ssrTransform(code, map as SourceMap, url, originalCode) - : ({ - code, - map, - etag: getEtag(code, { weak: true }), - } as TransformResult) + const result = + ssr && !server.config.experimental.skipSsrTransform + ? await server.ssrTransform(code, map as SourceMap, url, originalCode) + : ({ + code, + map, + etag: getEtag(code, { weak: true }), + } as TransformResult) // Only cache the result if the module wasn't invalidated while it was // being processed, so it is re-processed next time if it is stale