diff --git a/tests/renderer/viteConfig.test.ts b/tests/renderer/viteConfig.test.ts new file mode 100644 index 0000000..f3d9d56 --- /dev/null +++ b/tests/renderer/viteConfig.test.ts @@ -0,0 +1,25 @@ +// @vitest-environment node + +import { describe, expect, it } from 'vitest'; +import viteConfig from '../../vite.config'; + +describe('vite renderer chunking', () => { + it('splits monaco editor modules into a dedicated chunk', () => { + const resolved = typeof viteConfig === 'function' ? viteConfig({ command: 'build', mode: 'production', isSsrBuild: false, isPreview: false }) : viteConfig; + const output = resolved.build?.rollupOptions?.output; + + if (Array.isArray(output)) { + throw new Error('Expected a single rollup output config for renderer build'); + } + + expect(output?.manualChunks).toBeTypeOf('function'); + + const chunkName = output?.manualChunks?.('node_modules/monaco-editor/esm/vs/editor/editor.api.js'); + expect(chunkName).toBe('monaco-vendor'); + }); + + it('sets an explicit chunk size warning limit for Monaco worker assets', () => { + const resolved = typeof viteConfig === 'function' ? viteConfig({ command: 'build', mode: 'production', isSsrBuild: false, isPreview: false }) : viteConfig; + expect(resolved.build?.chunkSizeWarningLimit).toBe(8000); + }); +}); diff --git a/vite.config.ts b/vite.config.ts index ad6d04d..3d396d2 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -9,8 +9,28 @@ export default defineConfig({ build: { outDir: '../../dist/renderer', emptyOutDir: true, + chunkSizeWarningLimit: 8000, rollupOptions: { input: resolve(__dirname, 'src/renderer/index.html'), + output: { + manualChunks(id) { + if (id.includes('node_modules/monaco-editor') || id.includes('node_modules/@monaco-editor')) { + return 'monaco-vendor'; + } + + if (id.includes('node_modules/@milkdown') || id.includes('node_modules/prosemirror')) { + return 'editor-vendor'; + } + + if (id.includes('node_modules/react') || id.includes('node_modules/scheduler')) { + return 'react-vendor'; + } + + if (id.includes('node_modules/zustand') || id.includes('node_modules/date-fns')) { + return 'app-vendor'; + } + }, + }, }, }, resolve: {