import path from 'node:path' import type { BuildEnvironmentOptions } from 'vite' export function createRolldownSplitChunks(): BuildEnvironmentOptions { // 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 { rolldownOptions: { output: { advancedChunks: { 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}`; // } // }, // }, ], }, }, }, } }