From efa6f8dba31baa5d2099c78539b8281722df7af8 Mon Sep 17 00:00:00 2001
From: bluwy <bjornlu.dev@gmail.com>
Date: Wed, 26 Oct 2022 20:41:55 +0800
Subject: [PATCH 1/2] fix(config): resolve build options with fallback

---
 packages/vite/src/node/build.ts  | 22 +++++++++++++++-------
 packages/vite/src/node/config.ts |  6 +-----
 2 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts
index f4c14834a2380f..154829b4b6949d 100644
--- a/packages/vite/src/node/build.ts
+++ b/packages/vite/src/node/build.ts
@@ -50,6 +50,7 @@ import { ensureWatchPlugin } from './plugins/ensureWatch'
 import { ESBUILD_MODULES_TARGET, VERSION } from './constants'
 import { resolveChokidarOptions } from './watch'
 import { completeSystemWrapPlugin } from './plugins/completeSystemWrap'
+import { mergeConfig } from './publicUtils'
 
 export interface BuildOptions {
   /**
@@ -276,7 +277,6 @@ export interface ResolvedBuildOptions
 
 export function resolveBuildOptions(
   raw: BuildOptions | undefined,
-  isBuild: boolean,
   logger: Logger
 ): ResolvedBuildOptions {
   const deprecatedPolyfillModulePreload = raw?.polyfillModulePreload
@@ -301,8 +301,7 @@ export function resolveBuildOptions(
     polyfill: true
   }
 
-  const resolved: ResolvedBuildOptions = {
-    target: 'modules',
+  const defaultBuildOptions: BuildOptions = {
     outDir: 'dist',
     assetsDir: 'assets',
     assetsInlineLimit: 4096,
@@ -321,17 +320,26 @@ export function resolveBuildOptions(
     ssrManifest: false,
     reportCompressedSize: true,
     chunkSizeWarningLimit: 500,
-    watch: null,
-    ...raw,
+    watch: null
+  }
+
+  const userBuildOptions = raw
+    ? mergeConfig(defaultBuildOptions, raw)
+    : defaultBuildOptions
+
+  // @ts-expect-error Fallback options instead of merging
+  const resolved: ResolvedBuildOptions = {
+    target: 'modules',
+    ...userBuildOptions,
     commonjsOptions: {
       include: [/node_modules/],
       extensions: ['.js', '.cjs'],
-      ...raw?.commonjsOptions
+      ...userBuildOptions.commonjsOptions
     },
     dynamicImportVarsOptions: {
       warnOnError: true,
       exclude: [/node_modules/],
-      ...raw?.dynamicImportVarsOptions
+      ...userBuildOptions.dynamicImportVarsOptions
     },
     // Resolve to false | object
     modulePreload:
diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts
index dff650a1b487fd..ea9de372ed5fee 100644
--- a/packages/vite/src/node/config.ts
+++ b/packages/vite/src/node/config.ts
@@ -515,11 +515,7 @@ export async function resolveConfig(
       : './'
     : resolveBaseUrl(config.base, isBuild, logger) ?? '/'
 
-  const resolvedBuildOptions = resolveBuildOptions(
-    config.build,
-    isBuild,
-    logger
-  )
+  const resolvedBuildOptions = resolveBuildOptions(config.build, logger)
 
   // resolve cache directory
   const pkgPath = lookupFile(resolvedRoot, [`package.json`], { pathOnly: true })

From 82b4ff1a3a51066ff38a69f4daa1ae5608f2ee71 Mon Sep 17 00:00:00 2001
From: bluwy <bjornlu.dev@gmail.com>
Date: Wed, 26 Oct 2022 20:45:12 +0800
Subject: [PATCH 2/2] fix: move cssTarget too

---
 packages/vite/src/node/build.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts
index 154829b4b6949d..65563735927d0f 100644
--- a/packages/vite/src/node/build.ts
+++ b/packages/vite/src/node/build.ts
@@ -306,7 +306,6 @@ export function resolveBuildOptions(
     assetsDir: 'assets',
     assetsInlineLimit: 4096,
     cssCodeSplit: !raw?.lib,
-    cssTarget: false,
     sourcemap: false,
     rollupOptions: {},
     minify: raw?.ssr ? false : 'esbuild',
@@ -330,6 +329,7 @@ export function resolveBuildOptions(
   // @ts-expect-error Fallback options instead of merging
   const resolved: ResolvedBuildOptions = {
     target: 'modules',
+    cssTarget: false,
     ...userBuildOptions,
     commonjsOptions: {
       include: [/node_modules/],