添加 Rolldown 拆包
113
Rolldown-%E6%8B%86%E5%8C%85.md
Normal file
113
Rolldown-%E6%8B%86%E5%8C%85.md
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
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}`;
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user