From 4b293018cac787c9e3f762774f95d2e21de7d1cb Mon Sep 17 00:00:00 2001 From: XGHeaven Date: Wed, 19 Mar 2025 17:28:09 +0800 Subject: [PATCH] fix: codeSplitting is not works when using with splitChunks --- .../basic-project/codeSplitting.config.mts | 8 +++++++ .../splitChunksWithCodeSplitting.config.mts | 9 +++++++ packages/ice/src/config.ts | 22 +++++++---------- tests/integration/basic-project.test.ts | 24 +++++++++++++++++++ 4 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 examples/basic-project/codeSplitting.config.mts create mode 100644 examples/basic-project/splitChunksWithCodeSplitting.config.mts diff --git a/examples/basic-project/codeSplitting.config.mts b/examples/basic-project/codeSplitting.config.mts new file mode 100644 index 000000000..dfe3e305f --- /dev/null +++ b/examples/basic-project/codeSplitting.config.mts @@ -0,0 +1,8 @@ +import { defineConfig } from '@ice/app'; +import defaultConfig from './ice.config.mjs'; + +export default defineConfig(() => ({ + ...defaultConfig, + codeSplitting: false, + minify: false, +})); diff --git a/examples/basic-project/splitChunksWithCodeSplitting.config.mts b/examples/basic-project/splitChunksWithCodeSplitting.config.mts new file mode 100644 index 000000000..ca97b08f3 --- /dev/null +++ b/examples/basic-project/splitChunksWithCodeSplitting.config.mts @@ -0,0 +1,9 @@ +import { defineConfig } from '@ice/app'; +import defaultConfig from './ice.config.mjs'; + +export default defineConfig(() => ({ + ...defaultConfig, + splitChunks: false, + codeSplitting: false, + minify: false, +})); diff --git a/packages/ice/src/config.ts b/packages/ice/src/config.ts index c754ce74a..f69cf6b54 100644 --- a/packages/ice/src/config.ts +++ b/packages/ice/src/config.ts @@ -463,31 +463,27 @@ const userConfig = [ name: 'splitChunks', validation: 'boolean', defaultValue: true, - setConfig: (config: Config, splitChunks: UserConfig['splitChunks'], context: UserConfigContext) => { - const { originalUserConfig } = context; - // Make sure config.splitChunks is not overwritten when codeSplitting is set. - if (!('codeSplitting' in originalUserConfig)) { - config.splitChunks = splitChunks; - } - }, }, { name: 'codeSplitting', validation: 'boolean|string', defaultValue: true, setConfig: (config: Config, codeSplitting: UserConfig['codeSplitting'], context: UserConfigContext) => { - const { originalUserConfig } = context; - if ('splitChunks' in originalUserConfig) { - logger.warn( - 'splitChunks is deprecated, please use codeSplitting instead.https://ice.work/docs/guide/basic/config#codesplitting', - ); - } else { + const { originalUserConfig, userConfig } = context; + if ('codeSplitting' in originalUserConfig) { // When codeSplitting is set to false / router, do not config splitChunks. if (codeSplitting === false || codeSplitting === 'page') { config.splitChunks = false; } else { config.splitChunks = codeSplitting; } + } else { + config.splitChunks = userConfig.splitChunks; + } + if ('splitChunks' in originalUserConfig) { + logger.warn( + 'splitChunks is deprecated, please use codeSplitting instead. https://ice.work/docs/guide/basic/config#codesplitting', + ); } }, }, diff --git a/tests/integration/basic-project.test.ts b/tests/integration/basic-project.test.ts index 84f063742..207179f88 100644 --- a/tests/integration/basic-project.test.ts +++ b/tests/integration/basic-project.test.ts @@ -65,6 +65,30 @@ describe(`build ${example}`, () => { expect(files.length).toBe(11); }); + test('disable codeSplitting', async () => { + await buildFixture(example, { + config: 'codeSplitting.config.mts', + }); + const res = await setupBrowser({ example }); + page = res.page; + browser = res.browser; + + const files = fs.readdirSync(path.join(__dirname, `../../examples/${example}/build/js`), 'utf-8'); + expect(files.length).toBe(5); + }); + + test('disable splitChunks and codeSplitting', async () => { + await buildFixture(example, { + config: 'splitChunksWithCodeSplitting.config.mts', + }); + const res = await setupBrowser({ example }); + page = res.page; + browser = res.browser; + + const files = fs.readdirSync(path.join(__dirname, `../../examples/${example}/build/js`), 'utf-8'); + expect(files.length).toBe(5); + }); + test('render route config when downgrade to CSR.', async () => { await page.push('/downgrade.html'); expect(await page.$$text('title')).toStrictEqual(['']);