diff --git a/packages/playground/ssr-react/__tests__/ssr-react.spec.ts b/packages/playground/ssr-react/__tests__/ssr-react.spec.ts index 2235d4ae4d0edf..7bbb6066bf4aa7 100644 --- a/packages/playground/ssr-react/__tests__/ssr-react.spec.ts +++ b/packages/playground/ssr-react/__tests__/ssr-react.spec.ts @@ -1,6 +1,8 @@ import { editFile, untilUpdated } from '../../testUtils' import { port } from './serve' import fetch from 'node-fetch' +import { resolve } from 'path' +import promises from 'fs/promises' const url = `http://localhost:${port}` @@ -62,3 +64,12 @@ test(`circular dependecies modules doesn't throw`, async () => { 'circ-dep-init-a circ-dep-init-b' ) }) + +test('Home chunk file should be split succeed', async () => { + const assetsArr = await promises.readdir( + resolve(process.cwd(), './packages/temp/ssr-react/dist/client/assets') + ) + const re = /Home\.chunk/ + const res = assetsArr.some((asset) => re.test(asset)) + expect(res).toBe(true) +}) diff --git a/packages/playground/ssr-react/vite.config.js b/packages/playground/ssr-react/vite.config.js index bcc1369313cc5a..b49e74e4d3dfdb 100644 --- a/packages/playground/ssr-react/vite.config.js +++ b/packages/playground/ssr-react/vite.config.js @@ -6,6 +6,13 @@ const react = require('@vitejs/plugin-react') module.exports = { plugins: [react()], build: { - minify: false + minify: false, + manualChunks: (config) => { + return (id) => { + if (id.includes('Home.jsx')) { + return 'Home.chunk' + } + } + } } } diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index 9992578428aa71..e71c5125f9835c 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -235,7 +235,11 @@ export type ResolvedBuildOptions = Required< Omit< BuildOptions, // make deprecated options optional - 'base' | 'cleanCssOptions' | 'polyfillDynamicImport' | 'brotliSize' | 'manualChunks' + | 'base' + | 'cleanCssOptions' + | 'polyfillDynamicImport' + | 'brotliSize' + | 'manualChunks' > > @@ -509,7 +513,7 @@ async function doBuild( !libOptions && output?.format !== 'umd' && output?.format !== 'iife' - ? (createMoveToVendorChunkFn(config) && config.build.manualChunks?.(config)) + ? createManualChunksFn(config) : undefined, ...output } @@ -637,9 +641,9 @@ function getPkgName(root: string) { return name?.startsWith('@') ? name.split('/')[1] : name } -function createMoveToVendorChunkFn(config: ResolvedConfig): GetManualChunk { +function createManualChunksFn(config: ResolvedConfig): GetManualChunk { const cache = new Map() - return (id, { getModuleInfo }) => { + return (id, { getModuleInfo, getModuleIds }) => { if ( id.includes('node_modules') && !isCSSRequest(id) && @@ -647,6 +651,10 @@ function createMoveToVendorChunkFn(config: ResolvedConfig): GetManualChunk { ) { return 'vendor' } + return config.build.manualChunks?.(config)(id, { + getModuleInfo, + getModuleIds + }) } }