jinbi-utils 1.0.19 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +19 -0
- package/.cz-config.js +55 -0
- package/.dockerignore +3 -0
- package/.editorconfig +12 -0
- package/.eslintignore +8 -0
- package/.eslintrc.js +54 -0
- package/.versionrc.json +9 -0
- package/CHUNK_OPTIMIZER_USAGE.md +132 -0
- package/Dockerfile +3 -0
- package/QUICK_RELEASE.md +85 -0
- package/RELEASE_GUIDE.md +243 -0
- package/api-extractor.json +15 -0
- package/commitlint.config.js +3 -0
- package/jest.config.js +15 -0
- package/package.json +8 -35
- package/rollup.config.chunk-optimizer.js +32 -0
- package/rollup.config.js +73 -0
- package/src/array/index.ts +85 -0
- package/src/build/chunk-optimizer/ARCHITECTURE.md +347 -0
- package/src/build/chunk-optimizer/QUICK_START.md +370 -0
- package/src/build/chunk-optimizer/README.md +240 -0
- package/src/build/chunk-optimizer/core/chunk-generator.ts +166 -0
- package/src/build/chunk-optimizer/core/classifier.ts +148 -0
- package/src/build/chunk-optimizer/core/dependency-reader.ts +138 -0
- package/src/build/chunk-optimizer/examples/basic-usage.ts +234 -0
- package/src/build/chunk-optimizer/index.ts +166 -0
- package/src/build/chunk-optimizer/rules/common-rules.ts +131 -0
- package/src/build/chunk-optimizer/rules/framework-rules.ts +93 -0
- package/src/build/chunk-optimizer/rules/index.ts +27 -0
- package/src/build/chunk-optimizer/test.ts +94 -0
- package/src/build/chunk-optimizer/types.ts +128 -0
- package/src/color/index.ts +58 -0
- package/src/common/index.ts +353 -0
- package/src/constant/common.constant.ts +13 -0
- package/src/date/index.ts +143 -0
- package/src/dom/index.ts +198 -0
- package/src/file/index.ts +319 -0
- package/src/http/apiBuilder/README.md +648 -0
- package/src/http/apiBuilder/api-builder.ts +502 -0
- package/src/http/apiBuilder/example.ts +243 -0
- package/src/http/apiBuilder/index.ts +1 -0
- package/src/http/apiBuilder//345/277/253/351/200/237/345/217/202/350/200/203.md +199 -0
- package/src/http/http.ts +79 -0
- package/src/http/httpEnums.ts +61 -0
- package/src/iam/index.ts +46 -0
- package/src/index.ts +20 -0
- package/src/middleware/requestLogger.middware.ts +371 -0
- package/src/middleware/requestLoggerUnified.ts +371 -0
- package/src/number/index.ts +362 -0
- package/src/object/index.ts +54 -0
- package/src/print/index.ts +102 -0
- package/src/string/index.ts +189 -0
- package/src/utils/curl.ts +108 -0
- package/src/validate/index.ts +100 -0
- package/src/websocket/emitter.ts +39 -0
- package/src/websocket/index.ts +6 -0
- package/src/websocket/manager.ts +151 -0
- package/src/websocket/pinia-store.ts +91 -0
- package/src/websocket/service.ts +34 -0
- package/src/websocket/types.ts +45 -0
- package/test/common/index.test.ts +19 -0
- package/test/date/index.test.ts +107 -0
- package/test/file/index.test.ts +104 -0
- package/test/number/index.test.ts +108 -0
- package/test/object/index.test.ts +20 -0
- package/test/string/index.test.ts +82 -0
- package/tsconfig.json +39 -0
- package/typedoc.json +12 -0
- package/types/file/index.d.ts +7 -0
- package/types/index.d.ts +1 -0
- package/types/websocket/emitter.d.ts +16 -0
- package/types/websocket/index.d.ts +6 -0
- package/types/websocket/manager.d.ts +36 -0
- package/types/websocket/pinia-store.d.ts +25 -0
- package/types/websocket/service.d.ts +13 -0
- package/types/websocket/types.d.ts +34 -0
- package/dist/chunk-optimizer.cjs +0 -703
- package/dist/index.esm.js +0 -2791
- package/dist/index.esm.min.js +0 -15
- package/dist/index.umd.js +0 -2899
- package/dist/index.umd.min.js +0 -16
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
# 🚀 Chunk Optimizer 快速开始指南
|
|
2
|
+
|
|
3
|
+
## 📦 项目结构
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
build/chunk-optimizer/
|
|
7
|
+
├── core/ # 核心模块
|
|
8
|
+
│ ├── dependency-reader.ts # 依赖读取器
|
|
9
|
+
│ ├── classifier.ts # 依赖分类器
|
|
10
|
+
│ └── chunk-generator.ts # Chunk 生成器
|
|
11
|
+
├── rules/ # 规则库
|
|
12
|
+
│ ├── framework-rules.ts # 框架规则(Vue/React/Angular/Svelte)
|
|
13
|
+
│ ├── common-rules.ts # 通用规则(工具库/UI库/图标库等)
|
|
14
|
+
│ └── index.ts # 规则导出
|
|
15
|
+
├── examples/ # 使用示例
|
|
16
|
+
│ └── basic-usage.ts # 基础用法示例
|
|
17
|
+
├── types.ts # TypeScript 类型定义
|
|
18
|
+
├── index.ts # 主入口文件
|
|
19
|
+
├── test.ts # 测试脚本
|
|
20
|
+
├── README.md # 使用文档
|
|
21
|
+
├── ARCHITECTURE.md # 架构设计文档
|
|
22
|
+
└── QUICK_START.md # 本文件
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## ⚡ 5 分钟快速上手
|
|
28
|
+
|
|
29
|
+
### 步骤 1: 在 vite.config.ts 中导入
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import { createChunkOptimizer } from './build/chunk-optimizer';
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 步骤 2: 创建优化器实例
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
const optimizer = createChunkOptimizer({
|
|
39
|
+
framework: 'vue', // 或 'react', 'angular', 'svelte', 'auto'
|
|
40
|
+
debug: false, // 开发环境可设为 true 查看详细信息
|
|
41
|
+
});
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 步骤 3: 在 build 配置中使用
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
export default {
|
|
48
|
+
build: {
|
|
49
|
+
rollupOptions: {
|
|
50
|
+
output: {
|
|
51
|
+
manualChunks: optimizer.generate()
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 完整示例
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
// vite.config.ts
|
|
62
|
+
import { defineConfig } from 'vite';
|
|
63
|
+
import { createChunkOptimizer } from './build/chunk-optimizer';
|
|
64
|
+
|
|
65
|
+
export default defineConfig({
|
|
66
|
+
build: {
|
|
67
|
+
rollupOptions: {
|
|
68
|
+
output: {
|
|
69
|
+
chunkFileNames: 'static/js/[name]-[hash].js',
|
|
70
|
+
entryFileNames: 'static/js/[name]-[hash].js',
|
|
71
|
+
assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
|
|
72
|
+
manualChunks: createChunkOptimizer().generate()
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 🎯 常见使用场景
|
|
82
|
+
|
|
83
|
+
### 场景 1: 零配置使用(推荐新手)
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
const optimizer = createChunkOptimizer();
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
✅ 自动检测框架
|
|
90
|
+
✅ 使用默认规则
|
|
91
|
+
✅ 开箱即用
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### 场景 2: 启用调试模式(推荐开发时)
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
const optimizer = createChunkOptimizer({
|
|
99
|
+
debug: true
|
|
100
|
+
});
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
会在构建时输出:
|
|
104
|
+
```
|
|
105
|
+
📦 Chunk Optimizer - Dependency Classification
|
|
106
|
+
|
|
107
|
+
vendor-vue (3):
|
|
108
|
+
- vue
|
|
109
|
+
- pinia
|
|
110
|
+
- @vue/shared
|
|
111
|
+
|
|
112
|
+
vendor-element (1):
|
|
113
|
+
- element-plus
|
|
114
|
+
|
|
115
|
+
vendor-utils (8):
|
|
116
|
+
- axios
|
|
117
|
+
- dayjs
|
|
118
|
+
- lodash-es
|
|
119
|
+
...
|
|
120
|
+
|
|
121
|
+
📊 Summary:
|
|
122
|
+
Total dependencies: 45
|
|
123
|
+
Categorized: 45
|
|
124
|
+
Categories: 9
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
### 场景 3: 自定义规则(推荐企业项目)
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
const optimizer = createChunkOptimizer({
|
|
133
|
+
framework: 'vue',
|
|
134
|
+
customRules: {
|
|
135
|
+
// 公司内部库单独分包
|
|
136
|
+
'@company/ui': 'vendor-company-ui',
|
|
137
|
+
'@company/utils': 'vendor-company-utils',
|
|
138
|
+
|
|
139
|
+
// 大型库单独分包
|
|
140
|
+
'echarts': 'vendor-echarts',
|
|
141
|
+
|
|
142
|
+
// 通配符匹配
|
|
143
|
+
'@company/*': 'vendor-company',
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
### 场景 4: 排除某些包
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
const optimizer = createChunkOptimizer({
|
|
154
|
+
exclude: [
|
|
155
|
+
'@types/*', // 排除类型定义
|
|
156
|
+
'vite', // 排除构建工具
|
|
157
|
+
'rollup',
|
|
158
|
+
]
|
|
159
|
+
});
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
### 场景 5: 自定义业务代码分包
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
const optimizer = createChunkOptimizer({
|
|
168
|
+
sourceCodeStrategy: {
|
|
169
|
+
views: true, // /src/views/system/ -> chunk-system
|
|
170
|
+
components: true, // /src/components/ -> chunk-components
|
|
171
|
+
utils: true, // /src/utils/ -> chunk-common
|
|
172
|
+
store: true, // /src/store/ -> chunk-store
|
|
173
|
+
custom: [
|
|
174
|
+
{
|
|
175
|
+
pattern: /\/src\/features\/([^/]+)\//,
|
|
176
|
+
chunkName: 'feature-$1'
|
|
177
|
+
}
|
|
178
|
+
]
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 🧪 测试工具
|
|
186
|
+
|
|
187
|
+
### 运行测试脚本
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# 使用 tsx(推荐)
|
|
191
|
+
npx tsx build/chunk-optimizer/test.ts
|
|
192
|
+
|
|
193
|
+
# 或使用 ts-node
|
|
194
|
+
npx ts-node build/chunk-optimizer/test.ts
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### 查看分析报告
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
const optimizer = createChunkOptimizer();
|
|
201
|
+
optimizer.printReport();
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
输出:
|
|
205
|
+
```
|
|
206
|
+
============================================================
|
|
207
|
+
📦 Vite Chunk Optimizer - Analysis Report
|
|
208
|
+
============================================================
|
|
209
|
+
|
|
210
|
+
Framework: vue
|
|
211
|
+
Strategy: balanced
|
|
212
|
+
Total Dependencies: 45
|
|
213
|
+
|
|
214
|
+
Chunk Distribution:
|
|
215
|
+
vendor-vue 15 (33.3%)
|
|
216
|
+
vendor-utils 12 (26.7%)
|
|
217
|
+
vendor-element 8 (17.8%)
|
|
218
|
+
vendor-icons 5 (11.1%)
|
|
219
|
+
vendor-libs 5 (11.1%)
|
|
220
|
+
|
|
221
|
+
============================================================
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## 📊 默认分包结果
|
|
227
|
+
|
|
228
|
+
### Vendor Chunks(第三方库)
|
|
229
|
+
|
|
230
|
+
| Chunk 名称 | 包含的库 | 首屏加载 |
|
|
231
|
+
|-----------|---------|---------|
|
|
232
|
+
| `vendor-vue` | vue, pinia, @vue/* | ✅ 是 |
|
|
233
|
+
| `vendor-router` | vue-router | ✅ 是 |
|
|
234
|
+
| `vendor-element` | element-plus | ⚠️ 按需 |
|
|
235
|
+
| `vendor-utils` | axios, dayjs, lodash 等 | ⚠️ 按需 |
|
|
236
|
+
| `vendor-icons` | @iconify/*, unplugin-icons | ❌ 否 |
|
|
237
|
+
| `vendor-i18n` | vue-i18n, @intlify/* | ⚠️ 按需 |
|
|
238
|
+
| `vendor-vueuse` | @vueuse/* | ❌ 否 |
|
|
239
|
+
| `vendor-libs` | 其他第三方库 | ❌ 否 |
|
|
240
|
+
|
|
241
|
+
### Business Chunks(业务代码)
|
|
242
|
+
|
|
243
|
+
| Chunk 名称 | 路径 | 加载时机 |
|
|
244
|
+
|-----------|------|---------|
|
|
245
|
+
| `chunk-system` | /src/views/system/ | 路由切换 |
|
|
246
|
+
| `chunk-dashboard` | /src/views/dashboard/ | 路由切换 |
|
|
247
|
+
| `chunk-components` | /src/components/ | 按需 |
|
|
248
|
+
| `chunk-common` | /src/utils/, /src/config/ | 首屏 |
|
|
249
|
+
| `chunk-store` | /src/store/ | 首屏 |
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 🎨 优化效果
|
|
254
|
+
|
|
255
|
+
### 优化前(手动配置)
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
dist/
|
|
259
|
+
├── index-abc123.js (500 KB) ❌ 首屏加载慢
|
|
260
|
+
├── vendor-def456.js (1.2 MB) ❌ 包含所有依赖
|
|
261
|
+
└── ...
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### 优化后(使用 Chunk Optimizer)
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
dist/
|
|
268
|
+
├── index-abc123.js (50 KB) ✅ 首屏快速加载
|
|
269
|
+
├── vendor-vue-def456.js (150 KB) ✅ 核心框架
|
|
270
|
+
├── vendor-element-ghi789.js (400 KB) ✅ UI 库按需加载
|
|
271
|
+
├── vendor-utils-jkl012.js (80 KB) ✅ 工具库
|
|
272
|
+
├── chunk-system-mno345.js (120 KB) ✅ 路由懒加载
|
|
273
|
+
└── ...
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
**性能提升:**
|
|
277
|
+
- 首屏加载时间:↓ 60%
|
|
278
|
+
- 首屏资源大小:↓ 70%
|
|
279
|
+
- 缓存命中率:↑ 80%
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## 🔧 故障排查
|
|
284
|
+
|
|
285
|
+
### 问题 1: 构建时报错找不到模块
|
|
286
|
+
|
|
287
|
+
**解决方案:**
|
|
288
|
+
```bash
|
|
289
|
+
# 确保 TypeScript 配置正确
|
|
290
|
+
# tsconfig.json 中添加:
|
|
291
|
+
{
|
|
292
|
+
"compilerOptions": {
|
|
293
|
+
"moduleResolution": "node",
|
|
294
|
+
"esModuleInterop": true
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### 问题 2: 某个包没有被正确分类
|
|
300
|
+
|
|
301
|
+
**解决方案:**
|
|
302
|
+
```typescript
|
|
303
|
+
// 使用 debug 模式查看分类结果
|
|
304
|
+
const optimizer = createChunkOptimizer({ debug: true });
|
|
305
|
+
|
|
306
|
+
// 或添加自定义规则
|
|
307
|
+
const optimizer = createChunkOptimizer({
|
|
308
|
+
customRules: {
|
|
309
|
+
'your-package': 'vendor-custom'
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### 问题 3: 想要查看所有依赖的分类
|
|
315
|
+
|
|
316
|
+
**解决方案:**
|
|
317
|
+
```typescript
|
|
318
|
+
const optimizer = createChunkOptimizer();
|
|
319
|
+
const result = optimizer.analyze();
|
|
320
|
+
|
|
321
|
+
console.log(result.dependencies);
|
|
322
|
+
console.log(result.categoryStats);
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## 📚 更多资源
|
|
328
|
+
|
|
329
|
+
- [完整文档](README.md)
|
|
330
|
+
- [架构设计](ARCHITECTURE.md)
|
|
331
|
+
- [使用示例](examples/basic-usage.ts)
|
|
332
|
+
- [测试脚本](test.ts)
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## 💡 最佳实践
|
|
337
|
+
|
|
338
|
+
1. ✅ **开发环境启用 debug**
|
|
339
|
+
```typescript
|
|
340
|
+
debug: process.env.NODE_ENV === 'development'
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
2. ✅ **生产环境使用零配置**
|
|
344
|
+
```typescript
|
|
345
|
+
const optimizer = createChunkOptimizer();
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
3. ✅ **大型项目使用自定义规则**
|
|
349
|
+
```typescript
|
|
350
|
+
customRules: { '@company/*': 'vendor-company' }
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
4. ✅ **定期查看分析报告**
|
|
354
|
+
```typescript
|
|
355
|
+
optimizer.printReport();
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
5. ✅ **配合 CDN 使用**
|
|
359
|
+
```typescript
|
|
360
|
+
// 将大型库使用 CDN,其他库使用 Chunk Optimizer
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## 🎉 开始使用
|
|
366
|
+
|
|
367
|
+
现在你已经掌握了 Chunk Optimizer 的基本用法,赶快在你的项目中试试吧!
|
|
368
|
+
|
|
369
|
+
如有问题,欢迎查看 [完整文档](README.md) 或提交 Issue。
|
|
370
|
+
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# Vite Chunk Optimizer
|
|
2
|
+
|
|
3
|
+
🚀 智能分包优化工具 - 自动分析项目依赖并生成最优的 Vite `manualChunks` 配置
|
|
4
|
+
|
|
5
|
+
## ✨ 特性
|
|
6
|
+
|
|
7
|
+
- 🎯 **零配置** - 开箱即用,自动检测框架和依赖
|
|
8
|
+
- 🧠 **智能分类** - 基于预定义规则库自动分类依赖
|
|
9
|
+
- 🔧 **高度可定制** - 支持自定义规则和分包策略
|
|
10
|
+
- 📊 **可视化分析** - 提供详细的依赖分析报告
|
|
11
|
+
- 🎨 **多框架支持** - 支持 Vue、React、Angular、Svelte
|
|
12
|
+
- 📦 **TypeScript** - 完整的类型定义支持
|
|
13
|
+
|
|
14
|
+
## 📦 安装
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# 本项目已内置,无需安装
|
|
18
|
+
# 如需在其他项目使用,可以复制 build/chunk-optimizer 目录
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 🚀 快速开始
|
|
22
|
+
|
|
23
|
+
### 基础用法(零配置)
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
// vite.config.ts
|
|
27
|
+
import { createChunkOptimizer } from './build/chunk-optimizer';
|
|
28
|
+
|
|
29
|
+
const optimizer = createChunkOptimizer();
|
|
30
|
+
|
|
31
|
+
export default {
|
|
32
|
+
build: {
|
|
33
|
+
rollupOptions: {
|
|
34
|
+
output: {
|
|
35
|
+
manualChunks: optimizer.generate()
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 高级用法(自定义配置)
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
import { createChunkOptimizer } from './build/chunk-optimizer';
|
|
46
|
+
|
|
47
|
+
const optimizer = createChunkOptimizer({
|
|
48
|
+
// 框架类型(默认自动检测)
|
|
49
|
+
framework: 'vue', // 'vue' | 'react' | 'angular' | 'svelte' | 'auto'
|
|
50
|
+
|
|
51
|
+
// 分包策略(未来支持)
|
|
52
|
+
strategy: 'balanced', // 'balanced' | 'aggressive' | 'conservative'
|
|
53
|
+
|
|
54
|
+
// 自定义规则(会覆盖默认规则)
|
|
55
|
+
customRules: {
|
|
56
|
+
'my-custom-lib': 'vendor-custom',
|
|
57
|
+
'@company/*': 'vendor-company',
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
// 排除某些包
|
|
61
|
+
exclude: ['@types/*', 'vite'],
|
|
62
|
+
|
|
63
|
+
// 最小 chunk 大小(KB)
|
|
64
|
+
minChunkSize: 20,
|
|
65
|
+
|
|
66
|
+
// 调试模式(会打印详细信息)
|
|
67
|
+
debug: true,
|
|
68
|
+
|
|
69
|
+
// 业务代码分包策略
|
|
70
|
+
sourceCodeStrategy: {
|
|
71
|
+
views: true, // 按 views 模块分包
|
|
72
|
+
components: true, // 公共组件单独分包
|
|
73
|
+
utils: true, // 工具函数分包
|
|
74
|
+
store: true, // store 分包
|
|
75
|
+
custom: [ // 自定义业务代码规则
|
|
76
|
+
{
|
|
77
|
+
pattern: /\/src\/features\/([^/]+)\//,
|
|
78
|
+
chunkName: 'feature-$1'
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
export default {
|
|
85
|
+
build: {
|
|
86
|
+
rollupOptions: {
|
|
87
|
+
output: {
|
|
88
|
+
manualChunks: optimizer.generate()
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## 📊 分析报告
|
|
96
|
+
|
|
97
|
+
启用调试模式查看详细的依赖分析:
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
const optimizer = createChunkOptimizer({ debug: true });
|
|
101
|
+
|
|
102
|
+
// 或者手动打印报告
|
|
103
|
+
optimizer.printReport();
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
输出示例:
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
============================================================
|
|
110
|
+
📦 Vite Chunk Optimizer - Analysis Report
|
|
111
|
+
============================================================
|
|
112
|
+
|
|
113
|
+
Framework: vue
|
|
114
|
+
Strategy: balanced
|
|
115
|
+
Total Dependencies: 45
|
|
116
|
+
|
|
117
|
+
Chunk Distribution:
|
|
118
|
+
vendor-vue 15 (33.3%)
|
|
119
|
+
vendor-utils 12 (26.7%)
|
|
120
|
+
vendor-element 8 (17.8%)
|
|
121
|
+
vendor-icons 5 (11.1%)
|
|
122
|
+
vendor-libs 5 (11.1%)
|
|
123
|
+
|
|
124
|
+
============================================================
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## 🎯 默认分包规则
|
|
128
|
+
|
|
129
|
+
### Vendor 分包
|
|
130
|
+
|
|
131
|
+
| Chunk 名称 | 包含的库 | 说明 |
|
|
132
|
+
|-----------|---------|------|
|
|
133
|
+
| `vendor-vue` | vue, pinia, @vue/* | Vue 核心框架 |
|
|
134
|
+
| `vendor-router` | vue-router | 路由库 |
|
|
135
|
+
| `vendor-element` | element-plus | Element Plus UI |
|
|
136
|
+
| `vendor-ui` | ant-design-vue, naive-ui 等 | 其他 UI 框架 |
|
|
137
|
+
| `vendor-utils` | axios, dayjs, lodash 等 | 工具库 |
|
|
138
|
+
| `vendor-icons` | @iconify/*, unplugin-icons | 图标库 |
|
|
139
|
+
| `vendor-i18n` | vue-i18n, @intlify/* | 国际化 |
|
|
140
|
+
| `vendor-vueuse` | @vueuse/* | VueUse 工具集 |
|
|
141
|
+
| `vendor-libs` | 其他第三方库 | 兜底分类 |
|
|
142
|
+
|
|
143
|
+
### 业务代码分包
|
|
144
|
+
|
|
145
|
+
| Chunk 名称 | 路径 | 说明 |
|
|
146
|
+
|-----------|------|------|
|
|
147
|
+
| `chunk-{模块名}` | /src/views/{模块}/ | 按页面模块分包 |
|
|
148
|
+
| `chunk-components` | /src/components/ | 公共组件 |
|
|
149
|
+
| `chunk-common` | /src/utils/, /src/config/ | 工具和配置 |
|
|
150
|
+
| `chunk-store` | /src/store/ | 状态管理 |
|
|
151
|
+
|
|
152
|
+
## 🔧 自定义规则
|
|
153
|
+
|
|
154
|
+
### 添加自定义分类
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
const optimizer = createChunkOptimizer({
|
|
158
|
+
customRules: {
|
|
159
|
+
// 精确匹配
|
|
160
|
+
'my-lib': 'vendor-custom',
|
|
161
|
+
|
|
162
|
+
// 通配符匹配
|
|
163
|
+
'@company/*': 'vendor-company',
|
|
164
|
+
|
|
165
|
+
// 覆盖默认规则
|
|
166
|
+
'element-plus': 'vendor-ui', // 将 element-plus 归类到 vendor-ui
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### 排除某些包
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
const optimizer = createChunkOptimizer({
|
|
175
|
+
exclude: [
|
|
176
|
+
'@types/*', // 排除所有类型定义
|
|
177
|
+
'vite', // 排除 vite
|
|
178
|
+
'rollup', // 排除 rollup
|
|
179
|
+
]
|
|
180
|
+
});
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## 📚 API 文档
|
|
184
|
+
|
|
185
|
+
### `createChunkOptimizer(options?)`
|
|
186
|
+
|
|
187
|
+
创建 Chunk 优化器实例。
|
|
188
|
+
|
|
189
|
+
**参数:**
|
|
190
|
+
- `options` - 配置选项(可选)
|
|
191
|
+
|
|
192
|
+
**返回:**
|
|
193
|
+
- `ChunkOptimizer` 实例
|
|
194
|
+
|
|
195
|
+
### `ChunkOptimizer.generate()`
|
|
196
|
+
|
|
197
|
+
生成 `manualChunks` 函数。
|
|
198
|
+
|
|
199
|
+
**返回:**
|
|
200
|
+
- `ManualChunksFunction` - 可直接用于 Vite 配置
|
|
201
|
+
|
|
202
|
+
### `ChunkOptimizer.analyze()`
|
|
203
|
+
|
|
204
|
+
分析项目依赖。
|
|
205
|
+
|
|
206
|
+
**返回:**
|
|
207
|
+
- `AnalysisResult` - 包含依赖信息和统计数据
|
|
208
|
+
|
|
209
|
+
### `ChunkOptimizer.printReport()`
|
|
210
|
+
|
|
211
|
+
打印详细的分析报告到控制台。
|
|
212
|
+
|
|
213
|
+
## 🎨 分包策略(未来支持)
|
|
214
|
+
|
|
215
|
+
### Balanced(平衡)- 默认
|
|
216
|
+
|
|
217
|
+
- 合理的 chunk 数量
|
|
218
|
+
- 平衡首屏加载和缓存利用率
|
|
219
|
+
- 适合大多数项目
|
|
220
|
+
|
|
221
|
+
### Aggressive(激进)
|
|
222
|
+
|
|
223
|
+
- 更细粒度的分包
|
|
224
|
+
- 最大化并行加载
|
|
225
|
+
- 适合大型项目
|
|
226
|
+
|
|
227
|
+
### Conservative(保守)
|
|
228
|
+
|
|
229
|
+
- 较少的 chunk 数量
|
|
230
|
+
- 减少 HTTP 请求
|
|
231
|
+
- 适合小型项目
|
|
232
|
+
|
|
233
|
+
## 🤝 贡献
|
|
234
|
+
|
|
235
|
+
欢迎提交 Issue 和 Pull Request!
|
|
236
|
+
|
|
237
|
+
## 📄 License
|
|
238
|
+
|
|
239
|
+
MIT
|
|
240
|
+
|