From da1da074744c585b4250b36031e91b2600537ba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E6=B5=A9?= Date: Tue, 9 Sep 2025 19:14:04 +0800 Subject: [PATCH] =?UTF-8?q?build(=E9=85=8D=E7=BD=AE):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=88=86=E5=89=B2=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + pnpm-lock.yaml | 12 ++-- src/main.ts | 3 +- vite.config.solit-chunks.ts | 108 ++++++++++++++++++++++++++++++++++++ vite.config.ts | 48 +--------------- vitest.config.ts | 5 +- 6 files changed, 125 insertions(+), 52 deletions(-) create mode 100644 vite.config.solit-chunks.ts diff --git a/package.json b/package.json index 9a4043a..d27ebd1 100644 --- a/package.json +++ b/package.json @@ -100,6 +100,7 @@ "nprogress": "^0.2.0", "oxlint": "~1.14.0", "prettier": "3.6.2", + "rolldown": "1.0.0-beta.36", "typescript": "~5.9.2", "unocss": "^66.5.1", "unocss-preset-animations": "^1.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6e513a3..5e9065d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -144,6 +144,9 @@ importers: prettier: specifier: 3.6.2 version: 3.6.2 + rolldown: + specifier: 1.0.0-beta.36 + version: 1.0.0-beta.36 typescript: specifier: ~5.9.2 version: 5.9.2 @@ -194,7 +197,7 @@ importers: version: 3.2.4(@types/node@22.18.1)(jiti@2.5.1)(jsdom@26.1.0)(lightningcss@1.30.1)(yaml@2.8.1) vue-macros: specifier: 3.0.0-beta.23 - version: 3.0.0-beta.23(@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2)))(esbuild@0.25.9)(rolldown-vite@7.1.8(@types/node@22.18.1)(esbuild@0.25.9)(jiti@2.5.1)(yaml@2.8.1))(rollup@4.50.1)(typescript@5.9.2)(vue-tsc@3.0.6(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2)) + version: 3.0.0-beta.23(@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2)))(esbuild@0.25.9)(rolldown-vite@7.1.8(@types/node@22.18.1)(esbuild@0.25.9)(jiti@2.5.1)(yaml@2.8.1))(rolldown@1.0.0-beta.36)(rollup@4.50.1)(typescript@5.9.2)(vue-tsc@3.0.6(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2)) vue-tsc: specifier: ^3.0.6 version: 3.0.6(typescript@5.9.2) @@ -8857,9 +8860,10 @@ snapshots: optionalDependencies: '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) - unplugin-combine@2.1.2(esbuild@0.25.9)(rolldown-vite@7.1.8(@types/node@22.18.1)(esbuild@0.25.9)(jiti@2.5.1)(yaml@2.8.1))(rollup@4.50.1)(unplugin@2.3.10): + unplugin-combine@2.1.2(esbuild@0.25.9)(rolldown-vite@7.1.8(@types/node@22.18.1)(esbuild@0.25.9)(jiti@2.5.1)(yaml@2.8.1))(rolldown@1.0.0-beta.36)(rollup@4.50.1)(unplugin@2.3.10): optionalDependencies: esbuild: 0.25.9 + rolldown: 1.0.0-beta.36 rollup: 4.50.1 unplugin: 2.3.10 vite: rolldown-vite@7.1.8(@types/node@22.18.1)(esbuild@0.25.9)(jiti@2.5.1)(yaml@2.8.1) @@ -9180,7 +9184,7 @@ snapshots: '@vue/devtools-api': 6.6.4 vue: 3.5.21(typescript@5.9.2) - vue-macros@3.0.0-beta.23(@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2)))(esbuild@0.25.9)(rolldown-vite@7.1.8(@types/node@22.18.1)(esbuild@0.25.9)(jiti@2.5.1)(yaml@2.8.1))(rollup@4.50.1)(typescript@5.9.2)(vue-tsc@3.0.6(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2)): + vue-macros@3.0.0-beta.23(@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2)))(esbuild@0.25.9)(rolldown-vite@7.1.8(@types/node@22.18.1)(esbuild@0.25.9)(jiti@2.5.1)(yaml@2.8.1))(rolldown@1.0.0-beta.36)(rollup@4.50.1)(typescript@5.9.2)(vue-tsc@3.0.6(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2)): dependencies: '@vue-macros/better-define': 3.0.0-beta.23(vue@3.5.21(typescript@5.9.2)) '@vue-macros/boolean-prop': 3.0.0-beta.23(vue@3.5.21(typescript@5.9.2)) @@ -9212,7 +9216,7 @@ snapshots: '@vue-macros/short-vmodel': 3.0.0-beta.23(vue@3.5.21(typescript@5.9.2)) '@vue-macros/volar': 3.0.0-beta.23(typescript@5.9.2)(vue-tsc@3.0.6(typescript@5.9.2))(vue@3.5.21(typescript@5.9.2)) unplugin: 2.3.10 - unplugin-combine: 2.1.2(esbuild@0.25.9)(rolldown-vite@7.1.8(@types/node@22.18.1)(esbuild@0.25.9)(jiti@2.5.1)(yaml@2.8.1))(rollup@4.50.1)(unplugin@2.3.10) + unplugin-combine: 2.1.2(esbuild@0.25.9)(rolldown-vite@7.1.8(@types/node@22.18.1)(esbuild@0.25.9)(jiti@2.5.1)(yaml@2.8.1))(rolldown@1.0.0-beta.36)(rollup@4.50.1)(unplugin@2.3.10) unplugin-vue-define-options: 3.0.0-beta.23(vue@3.5.21(typescript@5.9.2)) vue: 3.5.21(typescript@5.9.2) transitivePeerDependencies: diff --git a/src/main.ts b/src/main.ts index 77f3ec5..a477f1a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -7,7 +7,6 @@ import App from './App.vue' const autoInstallModules = import.meta.glob('./plugins/!(index).ts', { eager: true }) -// import { setupPlugins } from './plugins' -const setupPlugins = (await import('./plugins')).setupPlugins +import { setupPlugins } from './plugins' setupPlugins(createApp(App), autoInstallModules).mount('#app') diff --git a/vite.config.solit-chunks.ts b/vite.config.solit-chunks.ts new file mode 100644 index 0000000..3b34332 --- /dev/null +++ b/vite.config.solit-chunks.ts @@ -0,0 +1,108 @@ +import path from 'node:path' + +import type { OutputOptions } from 'rolldown' + +export function createRolldownSplitChunks(): OutputOptions['advancedChunks'] { + // https://www.npmjs.com/package/utils4u/v/2.19.2?activeTab=code + function _formatFilename(id: string, prefix: string) { + const filename = path + .basename(id) + .split('?')[0] + .replace(/\.\w+$/, '') + return `${prefix}/${filename}` + } + function _isInNodeModules(id: string) { + return id.includes('node_modules') + } + function _getPkgName(moduleId: string) { + if (_isInNodeModules(moduleId)) { + let pkgName = moduleId + pkgName = pkgName.split('.pnpm/')?.[1] || pkgName + pkgName = pkgName.split('node_modules/')?.[1] || pkgName + pkgName = pkgName.startsWith('@') + ? pkgName.split('/')[0] + '/' + pkgName.split('/')[1] + : pkgName.split('/')[0] + return pkgName + } + } + + return { + groups: [ + { + name: 'vendors', + test(id) { + return id.includes('node_modules') + }, + }, + { + name: 'app', + test(id) { + return !id.includes('node_modules') + }, + }, + { + name: 'vue', + test(moduleId) { + return _getPkgName(moduleId) === 'vue' || _getPkgName(moduleId)?.startsWith('@vue/') + }, + priority: 20, + }, + // { + // name(moduleId, _ctx) { + // if (_isInNodeModules(moduleId)) { + // let pkgName = moduleId + // pkgName = pkgName.split('.pnpm/')?.[1] || pkgName + // pkgName = pkgName.split('node_modules/')?.[1] || pkgName + // pkgName = pkgName.startsWith('@') + // ? pkgName.split('/')[0] + '/' + pkgName.split('/')[1] + // : pkgName.split('/')[0] + // if (pkgName.startsWith('@vue/')) pkgName = 'vue' + + // // console.debug(`pkgName :>> `, pkgName) + + // // if ( + // // pkgName === 'primevue' || + // // pkgName.startsWith('@primevue') || + // // pkgName.startsWith('@primeuix') + // // ) { + // // return 'libs/primevue' + // // } + // console.debug(`_getPkgName(moduleId) :>> `, _getPkgName(moduleId)) + + // // if (pkgName === 'vue') { + // // return 'libs/vue' + // // } + // } + // }, + // priority: 10, + // }, + // { + // name: (moduleId) => (moduleId.includes('node_modules') ? 'libs' : 'app'), + // // 1 KB = 1024 字节,所以 102400 ÷ 1024 = 100 KB + // // minSize: 100 * 1024, + // }, + // { + // name: 'libs', + // test: /node_modules/, + // }, + // { + // name: 'vue', + // test: /node_modules[\\/]vue/, + // }, + // { + // name(moduleId, _ctx) { + // if (isInNodeModules(moduleId)) { + // let pkgName = moduleId + // pkgName = pkgName.split('.pnpm/')?.[1] || pkgName + // pkgName = pkgName.split('node_modules/')?.[1] || pkgName + // pkgName = pkgName.startsWith('@') + // ? pkgName.split('/')[0] + '/' + pkgName.split('/')[1] + // : pkgName.split('/')[0] + // if (pkgName.startsWith('@vue/')) pkgName = 'vue' + // return `libs/${pkgName}`; + // } + // }, + // }, + ], + } +} diff --git a/vite.config.ts b/vite.config.ts index b7a4420..0b76f7a 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,22 +1,9 @@ import { fileURLToPath, URL } from 'node:url' - +import { createViteProxy } from 'utils4u/vite' import { defineConfig, type DepOptimizationOptions } from 'vite' -import { createViteProxy } from 'utils4u/vite' -import path from 'node:path' - import { Plugins } from './vite.config.plugins' - -function formatFilename(id: string, prefix: string) { - const filename = path - .basename(id) - .split('?')[0] - .replace(/\.\w+$/, '') - return `${prefix}/${filename}` -} -function isInNodeModules(id: string) { - return id.includes('node_modules') -} +import { createRolldownSplitChunks } from './vite.config.solit-chunks' // https://vite.dev/config/ export default defineConfig(({ command /* mode */ }) => { @@ -27,36 +14,7 @@ export default defineConfig(({ command /* mode */ }) => { build: { rolldownOptions: { output: { - advancedChunks: { - groups: [ - { - name: (moduleId) => (moduleId.includes('node_modules') ? 'libss' : 'app'), - // minSize: 100 * 1024, - }, - { - name: 'libs', - test: /node_modules/, - }, - // { - // name: 'vue', - // test: /node_modules[\\/]vue/, - // }, - // { - // name(moduleId, _ctx) { - // if (isInNodeModules(moduleId)) { - // let pkgName = moduleId - // pkgName = pkgName.split('.pnpm/')?.[1] || pkgName - // pkgName = pkgName.split('node_modules/')?.[1] || pkgName - // pkgName = pkgName.startsWith('@') - // ? pkgName.split('/')[0] + '/' + pkgName.split('/')[1] - // : pkgName.split('/')[0] - // if (pkgName.startsWith('@vue/')) pkgName = 'vue' - // return `libs/${pkgName}`; - // } - // }, - // }, - ], - }, + advancedChunks: createRolldownSplitChunks(), }, }, }, diff --git a/vitest.config.ts b/vitest.config.ts index c328717..af3de0d 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -3,7 +3,10 @@ import { mergeConfig, defineConfig, configDefaults } from 'vitest/config' import viteConfig from './vite.config' export default mergeConfig( - viteConfig, + viteConfig({ + command: 'build', + mode: 'test', + }), defineConfig({ test: { environment: 'jsdom',