build(配置): 优化代码分割配置

This commit is contained in:
严浩
2025-09-09 19:14:04 +08:00
parent 4851b83c37
commit da1da07474
6 changed files with 125 additions and 52 deletions

108
vite.config.solit-chunks.ts Normal file
View File

@@ -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}`;
// }
// },
// },
],
}
}