@fchc8/vite-plugin-multi-page 1.0.0
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/LICENSE +21 -0
- package/README-EN.md +424 -0
- package/README.md +502 -0
- package/dist/index.d.mts +89 -0
- package/dist/index.d.ts +89 -0
- package/dist/index.js +441 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +406 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +88 -0
package/README.md
ADDED
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
# vite-plugin-multi-page
|
|
2
|
+
|
|
3
|
+
> [English Documentation](./README-EN.md) | 中文文档
|
|
4
|
+
|
|
5
|
+
一个强大的 Vite 插件,用于构建多页面应用程序,支持智能文件路由和多种构建策略。
|
|
6
|
+
|
|
7
|
+
## ✨ 特性
|
|
8
|
+
|
|
9
|
+
- 🚀 **自动页面发现**:基于文件模式自动扫描和配置入口页面
|
|
10
|
+
- 🎯 **多构建策略**:为不同页面配置不同的构建选项和优化策略
|
|
11
|
+
- 🧩 **灵活配置**:支持对象配置、函数配置和模式匹配
|
|
12
|
+
- 📱 **响应式模板**:不同页面可使用不同的 HTML 模板
|
|
13
|
+
- 🔧 **完整 Vite 集成**:继承所有 Vite 配置选项
|
|
14
|
+
- 🌍 **环境变量支持**:页面级和策略级环境变量定义
|
|
15
|
+
- 🎨 **开发友好**:详细的调试日志和热重载支持
|
|
16
|
+
|
|
17
|
+
## 📦 安装
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install vite-plugin-multi-page
|
|
21
|
+
# 或
|
|
22
|
+
yarn add vite-plugin-multi-page
|
|
23
|
+
# 或
|
|
24
|
+
pnpm add vite-plugin-multi-page
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 🚀 快速开始
|
|
28
|
+
|
|
29
|
+
### 基础用法
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
// vite.config.ts
|
|
33
|
+
import { defineConfig } from 'vite';
|
|
34
|
+
import viteMultiPage from 'vite-plugin-multi-page';
|
|
35
|
+
|
|
36
|
+
export default defineConfig({
|
|
37
|
+
plugins: [
|
|
38
|
+
viteMultiPage({
|
|
39
|
+
entry: 'src/pages/**/*.{ts,js}',
|
|
40
|
+
template: 'index.html',
|
|
41
|
+
exclude: ['src/main.ts'],
|
|
42
|
+
debug: true,
|
|
43
|
+
}),
|
|
44
|
+
],
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 项目结构示例
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
project/
|
|
52
|
+
├── src/
|
|
53
|
+
│ └── pages/
|
|
54
|
+
│ ├── home.ts → /home.html
|
|
55
|
+
│ ├── about.ts → /about.html
|
|
56
|
+
│ ├── admin/
|
|
57
|
+
│ │ └── dashboard.ts → /dashboard.html
|
|
58
|
+
│ └── mobile/
|
|
59
|
+
│ └── app.js → /app.html
|
|
60
|
+
├── index.html
|
|
61
|
+
├── admin.html
|
|
62
|
+
└── mobile.html
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## 🎯 高级配置
|
|
66
|
+
|
|
67
|
+
### 多构建策略
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
import { defineConfig } from 'vite';
|
|
71
|
+
import viteMultiPage from 'vite-plugin-multi-page';
|
|
72
|
+
|
|
73
|
+
export default defineConfig({
|
|
74
|
+
plugins: [
|
|
75
|
+
viteMultiPage({
|
|
76
|
+
entry: 'src/pages/**/*.{ts,js}',
|
|
77
|
+
|
|
78
|
+
// 定义构建策略
|
|
79
|
+
buildStrategies: {
|
|
80
|
+
// 现代浏览器策略
|
|
81
|
+
default: {
|
|
82
|
+
viteConfig: {
|
|
83
|
+
define: {
|
|
84
|
+
'process.env.BUILD_TYPE': '"modern"',
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
output: {
|
|
88
|
+
format: 'es',
|
|
89
|
+
entryFileNames: 'assets/[name]-[hash].js',
|
|
90
|
+
},
|
|
91
|
+
build: {
|
|
92
|
+
target: 'es2015',
|
|
93
|
+
minify: 'esbuild',
|
|
94
|
+
sourcemap: true,
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
|
|
98
|
+
// 兼容模式策略
|
|
99
|
+
legacy: {
|
|
100
|
+
viteConfig: {
|
|
101
|
+
define: {
|
|
102
|
+
'process.env.BUILD_TYPE': '"legacy"',
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
output: {
|
|
106
|
+
format: 'iife',
|
|
107
|
+
entryFileNames: 'legacy/[name].js',
|
|
108
|
+
},
|
|
109
|
+
build: {
|
|
110
|
+
target: 'es5',
|
|
111
|
+
minify: 'terser',
|
|
112
|
+
sourcemap: false,
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
// 移动端优化策略
|
|
117
|
+
mobile: {
|
|
118
|
+
viteConfig: {
|
|
119
|
+
css: {
|
|
120
|
+
devSourcemap: true,
|
|
121
|
+
},
|
|
122
|
+
optimizeDeps: {
|
|
123
|
+
include: ['mobile-utils'],
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
build: {
|
|
127
|
+
target: 'es2018',
|
|
128
|
+
chunkSizeWarningLimit: 300,
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
}),
|
|
133
|
+
],
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### 函数配置
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
viteMultiPage({
|
|
141
|
+
entry: 'src/pages/**/*.{ts,js}',
|
|
142
|
+
|
|
143
|
+
// 使用函数进行动态配置
|
|
144
|
+
pageConfigs: context => {
|
|
145
|
+
const { pageName, filePath, relativePath } = context;
|
|
146
|
+
|
|
147
|
+
// 管理后台页面
|
|
148
|
+
if (pageName.startsWith('admin')) {
|
|
149
|
+
return {
|
|
150
|
+
strategy: 'default',
|
|
151
|
+
template: 'admin.html',
|
|
152
|
+
define: {
|
|
153
|
+
'process.env.API_BASE': '"https://admin-api.example.com"',
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// 移动端页面
|
|
159
|
+
if (relativePath.includes('/mobile/')) {
|
|
160
|
+
return {
|
|
161
|
+
strategy: 'mobile',
|
|
162
|
+
template: 'mobile.html',
|
|
163
|
+
define: {
|
|
164
|
+
'process.env.API_BASE': '"https://mobile-api.example.com"',
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// 默认配置
|
|
170
|
+
return {
|
|
171
|
+
strategy: 'default',
|
|
172
|
+
};
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### 对象配置与模式匹配
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
viteMultiPage({
|
|
181
|
+
entry: 'src/pages/**/*.{ts,js}',
|
|
182
|
+
|
|
183
|
+
pageConfigs: {
|
|
184
|
+
// 精确匹配
|
|
185
|
+
home: {
|
|
186
|
+
strategy: 'default',
|
|
187
|
+
template: 'home.html',
|
|
188
|
+
},
|
|
189
|
+
|
|
190
|
+
// 通配符匹配
|
|
191
|
+
'admin*': {
|
|
192
|
+
strategy: 'default',
|
|
193
|
+
template: 'admin.html',
|
|
194
|
+
},
|
|
195
|
+
|
|
196
|
+
// 模式匹配
|
|
197
|
+
'mobile-app': {
|
|
198
|
+
strategy: 'mobile',
|
|
199
|
+
match: ['**/mobile/**', '*mobile*'],
|
|
200
|
+
template: 'mobile.html',
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## 📋 配置选项
|
|
207
|
+
|
|
208
|
+
### MultiPageOptions
|
|
209
|
+
|
|
210
|
+
| 选项 | 类型 | 默认值 | 描述 |
|
|
211
|
+
| ----------------- | -------------------------------------------------- | -------------------------------------- | ---------------- |
|
|
212
|
+
| `entry` | `string` | `"src/**/*.{ts,js}"` | 入口文件匹配模式 |
|
|
213
|
+
| `template` | `string` | `"index.html"` | 默认 HTML 模板 |
|
|
214
|
+
| `exclude` | `string[]` | `["src/main.ts", "src/vite-env.d.ts"]` | 排除的文件 |
|
|
215
|
+
| `placeholder` | `string` | `"{{ENTRY_FILE}}"` | 模板中的占位符 |
|
|
216
|
+
| `debug` | `boolean` | `false` | 启用调试日志 |
|
|
217
|
+
| `buildStrategies` | `Record<string, BuildStrategy>` | `{}` | 构建策略定义 |
|
|
218
|
+
| `pageConfigs` | `Record<string, PageConfig> \| PageConfigFunction` | `{}` | 页面配置 |
|
|
219
|
+
|
|
220
|
+
### BuildStrategy
|
|
221
|
+
|
|
222
|
+
```typescript
|
|
223
|
+
interface BuildStrategy {
|
|
224
|
+
// 完整的 Vite 配置支持
|
|
225
|
+
viteConfig?: Omit<UserConfig, 'plugins' | 'build'> & {
|
|
226
|
+
build?: BuildOptions;
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
// 输出配置
|
|
230
|
+
output?: {
|
|
231
|
+
format?: 'es' | 'cjs' | 'umd' | 'iife';
|
|
232
|
+
dir?: string;
|
|
233
|
+
entryFileNames?: string;
|
|
234
|
+
chunkFileNames?: string;
|
|
235
|
+
assetFileNames?: string;
|
|
236
|
+
globals?: Record<string, string>;
|
|
237
|
+
external?: string | string[] | ((id: string) => boolean);
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
// 构建配置
|
|
241
|
+
build?: {
|
|
242
|
+
target?: string | string[];
|
|
243
|
+
minify?: boolean | 'terser' | 'esbuild';
|
|
244
|
+
sourcemap?: boolean | 'inline' | 'hidden';
|
|
245
|
+
lib?: boolean | LibraryOptions;
|
|
246
|
+
cssCodeSplit?: boolean;
|
|
247
|
+
cssTarget?: string | string[];
|
|
248
|
+
rollupOptions?: any;
|
|
249
|
+
// ... 更多 Vite 构建选项
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
// 环境变量
|
|
253
|
+
define?: Record<string, any>;
|
|
254
|
+
|
|
255
|
+
// 别名配置
|
|
256
|
+
alias?: Record<string, string>;
|
|
257
|
+
|
|
258
|
+
// 服务器配置
|
|
259
|
+
server?: ServerOptions;
|
|
260
|
+
|
|
261
|
+
// CSS 配置
|
|
262
|
+
css?: CSSOptions;
|
|
263
|
+
|
|
264
|
+
// 依赖优化
|
|
265
|
+
optimizeDeps?: DepOptimizationOptions;
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### PageConfig
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
interface PageConfig {
|
|
273
|
+
strategy?: string; // 使用的构建策略
|
|
274
|
+
template?: string; // 页面模板
|
|
275
|
+
exclude?: string[]; // 排除规则
|
|
276
|
+
define?: Record<string, any>; // 环境变量
|
|
277
|
+
alias?: Record<string, string>; // 别名
|
|
278
|
+
build?: Partial<BuildStrategy['build']>; // 构建配置
|
|
279
|
+
match?: string | string[]; // 匹配模式
|
|
280
|
+
}
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
## 🌟 使用场景
|
|
284
|
+
|
|
285
|
+
### 1. 企业级多页应用
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
buildStrategies: {
|
|
289
|
+
admin: {
|
|
290
|
+
viteConfig: {
|
|
291
|
+
define: { 'process.env.APP_TYPE': '"admin"' }
|
|
292
|
+
},
|
|
293
|
+
build: {
|
|
294
|
+
target: 'es2015',
|
|
295
|
+
sourcemap: true
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
|
|
299
|
+
public: {
|
|
300
|
+
viteConfig: {
|
|
301
|
+
define: { 'process.env.APP_TYPE': '"public"' }
|
|
302
|
+
},
|
|
303
|
+
build: {
|
|
304
|
+
target: 'es5',
|
|
305
|
+
minify: 'terser'
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### 2. 移动端优化
|
|
312
|
+
|
|
313
|
+
```typescript
|
|
314
|
+
buildStrategies: {
|
|
315
|
+
mobile: {
|
|
316
|
+
viteConfig: {
|
|
317
|
+
css: { devSourcemap: true },
|
|
318
|
+
optimizeDeps: { include: ['@mobile/utils'] }
|
|
319
|
+
},
|
|
320
|
+
build: {
|
|
321
|
+
target: 'es2018',
|
|
322
|
+
chunkSizeWarningLimit: 300,
|
|
323
|
+
cssCodeSplit: true
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### 3. 组件库开发
|
|
330
|
+
|
|
331
|
+
```typescript
|
|
332
|
+
buildStrategies: {
|
|
333
|
+
library: {
|
|
334
|
+
build: {
|
|
335
|
+
lib: {
|
|
336
|
+
entry: 'src/index.ts',
|
|
337
|
+
name: 'MyLibrary',
|
|
338
|
+
formats: ['es', 'umd']
|
|
339
|
+
},
|
|
340
|
+
minify: false,
|
|
341
|
+
sourcemap: true
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
## 📱 示例项目
|
|
348
|
+
|
|
349
|
+
查看 `example/` 目录获取完整的示例项目,包含:
|
|
350
|
+
|
|
351
|
+
- 管理后台页面(现代语法)
|
|
352
|
+
- 移动端应用(兼容语法)
|
|
353
|
+
- 组件库文档
|
|
354
|
+
- 不同的 HTML 模板
|
|
355
|
+
- 函数配置示例
|
|
356
|
+
|
|
357
|
+
### 快速开始
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
# 方法一:使用根目录脚本
|
|
361
|
+
npm run example:dev # 开发模式
|
|
362
|
+
npm run example:build # 构建
|
|
363
|
+
npm run example:preview # 预览构建结果
|
|
364
|
+
|
|
365
|
+
# 方法二:手动设置
|
|
366
|
+
npm run build # 先构建插件
|
|
367
|
+
cd example
|
|
368
|
+
npm install # 安装示例依赖
|
|
369
|
+
npm run dev # 运行开发服务器
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
### 示例页面
|
|
373
|
+
|
|
374
|
+
构建后访问以下页面:
|
|
375
|
+
|
|
376
|
+
- `/home.html` - 首页(默认策略)
|
|
377
|
+
- `/about.html` - 关于页面(默认策略)
|
|
378
|
+
- `/mobile.html` - 移动端页面(移动端模板)
|
|
379
|
+
|
|
380
|
+
## 🔧 开发
|
|
381
|
+
|
|
382
|
+
```bash
|
|
383
|
+
# 克隆项目
|
|
384
|
+
git clone https://github.com/fchc7/vite-plugin-multi-page.git
|
|
385
|
+
cd vite-plugin-multi-page
|
|
386
|
+
|
|
387
|
+
# 项目初始化
|
|
388
|
+
./scripts/setup.sh
|
|
389
|
+
|
|
390
|
+
# 开发模式
|
|
391
|
+
pnpm dev
|
|
392
|
+
|
|
393
|
+
# 类型检查
|
|
394
|
+
pnpm type-check
|
|
395
|
+
|
|
396
|
+
# 代码格式化
|
|
397
|
+
pnpm format
|
|
398
|
+
|
|
399
|
+
# 代码检查
|
|
400
|
+
pnpm lint
|
|
401
|
+
|
|
402
|
+
# 构建
|
|
403
|
+
pnpm build
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
## 🔄 Git Flow 工作流
|
|
407
|
+
|
|
408
|
+
我们使用 Git Flow 进行版本管理和发布:
|
|
409
|
+
|
|
410
|
+
### 功能开发
|
|
411
|
+
|
|
412
|
+
```bash
|
|
413
|
+
# 开始新功能
|
|
414
|
+
npm run git:feature start mobile-support
|
|
415
|
+
|
|
416
|
+
# 完成功能开发
|
|
417
|
+
npm run git:feature finish mobile-support
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### 版本发布
|
|
421
|
+
|
|
422
|
+
```bash
|
|
423
|
+
# 开始发布准备
|
|
424
|
+
npm run git:release start 1.1.0
|
|
425
|
+
|
|
426
|
+
# 完成发布
|
|
427
|
+
npm run git:release finish 1.1.0
|
|
428
|
+
|
|
429
|
+
# 发布到 npm
|
|
430
|
+
npm run git:release publish minor
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### 紧急修复
|
|
434
|
+
|
|
435
|
+
```bash
|
|
436
|
+
# 开始紧急修复
|
|
437
|
+
npm run git:hotfix start 1.0.1
|
|
438
|
+
|
|
439
|
+
# 完成修复
|
|
440
|
+
npm run git:hotfix finish 1.0.1
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
## 📦 发布流程
|
|
444
|
+
|
|
445
|
+
### 发布前检查
|
|
446
|
+
|
|
447
|
+
```bash
|
|
448
|
+
# 运行完整检查
|
|
449
|
+
npm run pre-release
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
### 直接发布
|
|
453
|
+
|
|
454
|
+
```bash
|
|
455
|
+
# 补丁版本 (1.0.0 -> 1.0.1)
|
|
456
|
+
npm run release:patch
|
|
457
|
+
|
|
458
|
+
# 次要版本 (1.0.0 -> 1.1.0)
|
|
459
|
+
npm run release:minor
|
|
460
|
+
|
|
461
|
+
# 主要版本 (1.0.0 -> 2.0.0)
|
|
462
|
+
npm run release:major
|
|
463
|
+
|
|
464
|
+
# 预发布版本
|
|
465
|
+
npm run release:beta # Beta 版本
|
|
466
|
+
npm run release:alpha # Alpha 版本
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
### 自动化发布
|
|
470
|
+
|
|
471
|
+
推送标签会自动触发 GitHub Actions 发布:
|
|
472
|
+
|
|
473
|
+
```bash
|
|
474
|
+
git tag v1.1.0
|
|
475
|
+
git push origin v1.1.0
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
## 📚 文档
|
|
479
|
+
|
|
480
|
+
- 📋 [发布指南](./RELEASE.md) - 完整的发布流程说明
|
|
481
|
+
- 🤝 [贡献指南](./CONTRIBUTING.md) - 如何为项目做贡献
|
|
482
|
+
- 📝 [变更日志](./CHANGELOG.md) - 版本变更记录
|
|
483
|
+
- ✅ [检查清单](./CHECKLIST.md) - 发布前检查清单
|
|
484
|
+
|
|
485
|
+
## 🤝 贡献
|
|
486
|
+
|
|
487
|
+
欢迎提交 Issue 和 Pull Request!
|
|
488
|
+
|
|
489
|
+
请阅读我们的 [贡献指南](./CONTRIBUTING.md) 了解详细的开发流程和代码规范。
|
|
490
|
+
|
|
491
|
+
## 📄 许可证
|
|
492
|
+
|
|
493
|
+
MIT License
|
|
494
|
+
|
|
495
|
+
## 🔗 相关链接
|
|
496
|
+
|
|
497
|
+
- [Vite 官方文档](https://vitejs.dev/)
|
|
498
|
+
- [TypeScript](https://www.typescriptlang.org/)
|
|
499
|
+
- [ESLint](https://eslint.org/)
|
|
500
|
+
- [Prettier](https://prettier.io/)
|
|
501
|
+
- [Git Flow](https://nvie.com/posts/a-successful-git-branching-model/)
|
|
502
|
+
- [语义化版本](https://semver.org/lang/zh-CN/)
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { UserConfig, BuildOptions, Plugin } from 'vite';
|
|
2
|
+
|
|
3
|
+
interface MultiPageOptions {
|
|
4
|
+
entry?: string;
|
|
5
|
+
template?: string;
|
|
6
|
+
exclude?: string[];
|
|
7
|
+
placeholder?: string;
|
|
8
|
+
debug?: boolean;
|
|
9
|
+
buildStrategies?: Record<string, BuildStrategy>;
|
|
10
|
+
pageConfigs?: Record<string, PageConfig> | PageConfigFunction;
|
|
11
|
+
}
|
|
12
|
+
interface BuildStrategy {
|
|
13
|
+
viteConfig?: Omit<UserConfig, 'plugins' | 'build'> & {
|
|
14
|
+
build?: BuildOptions;
|
|
15
|
+
};
|
|
16
|
+
output?: {
|
|
17
|
+
format?: 'es' | 'cjs' | 'umd' | 'iife';
|
|
18
|
+
dir?: string;
|
|
19
|
+
entryFileNames?: string;
|
|
20
|
+
chunkFileNames?: string;
|
|
21
|
+
assetFileNames?: string;
|
|
22
|
+
globals?: Record<string, string>;
|
|
23
|
+
external?: string | string[] | ((id: string) => boolean);
|
|
24
|
+
};
|
|
25
|
+
build?: {
|
|
26
|
+
target?: string | string[];
|
|
27
|
+
minify?: boolean | 'terser' | 'esbuild';
|
|
28
|
+
sourcemap?: boolean | 'inline' | 'hidden';
|
|
29
|
+
lib?: boolean | {
|
|
30
|
+
entry: string | string[] | {
|
|
31
|
+
[entryAlias: string]: string;
|
|
32
|
+
};
|
|
33
|
+
name?: string;
|
|
34
|
+
formats?: ('es' | 'cjs' | 'umd' | 'iife')[];
|
|
35
|
+
fileName?: string | ((format: string, entryName: string) => string);
|
|
36
|
+
};
|
|
37
|
+
cssCodeSplit?: boolean;
|
|
38
|
+
cssTarget?: string | string[];
|
|
39
|
+
rollupOptions?: any;
|
|
40
|
+
reportCompressedSize?: boolean;
|
|
41
|
+
chunkSizeWarningLimit?: number;
|
|
42
|
+
assetsDir?: string;
|
|
43
|
+
emptyOutDir?: boolean;
|
|
44
|
+
};
|
|
45
|
+
define?: Record<string, any>;
|
|
46
|
+
alias?: Record<string, string>;
|
|
47
|
+
server?: {
|
|
48
|
+
port?: number;
|
|
49
|
+
host?: string | boolean;
|
|
50
|
+
https?: boolean;
|
|
51
|
+
cors?: boolean;
|
|
52
|
+
headers?: Record<string, string>;
|
|
53
|
+
};
|
|
54
|
+
css?: {
|
|
55
|
+
modules?: any;
|
|
56
|
+
postcss?: any;
|
|
57
|
+
preprocessorOptions?: Record<string, any>;
|
|
58
|
+
devSourcemap?: boolean;
|
|
59
|
+
};
|
|
60
|
+
optimizeDeps?: {
|
|
61
|
+
entries?: string | string[];
|
|
62
|
+
exclude?: string[];
|
|
63
|
+
include?: string[];
|
|
64
|
+
esbuildOptions?: any;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
interface PageConfigBase {
|
|
68
|
+
strategy?: string;
|
|
69
|
+
template?: string;
|
|
70
|
+
exclude?: string[];
|
|
71
|
+
define?: Record<string, any>;
|
|
72
|
+
alias?: Record<string, string>;
|
|
73
|
+
build?: Partial<BuildStrategy['build']>;
|
|
74
|
+
match?: string | string[];
|
|
75
|
+
}
|
|
76
|
+
interface PageConfig extends PageConfigBase {
|
|
77
|
+
}
|
|
78
|
+
interface PageConfigContext {
|
|
79
|
+
pageName: string;
|
|
80
|
+
filePath: string;
|
|
81
|
+
relativePath: string;
|
|
82
|
+
strategy?: string;
|
|
83
|
+
isMatched?: boolean;
|
|
84
|
+
}
|
|
85
|
+
type PageConfigFunction = (context: PageConfigContext) => PageConfig | null;
|
|
86
|
+
|
|
87
|
+
declare function viteMultiPage(options?: MultiPageOptions): Plugin;
|
|
88
|
+
|
|
89
|
+
export { type MultiPageOptions, viteMultiPage as default, viteMultiPage };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { UserConfig, BuildOptions, Plugin } from 'vite';
|
|
2
|
+
|
|
3
|
+
interface MultiPageOptions {
|
|
4
|
+
entry?: string;
|
|
5
|
+
template?: string;
|
|
6
|
+
exclude?: string[];
|
|
7
|
+
placeholder?: string;
|
|
8
|
+
debug?: boolean;
|
|
9
|
+
buildStrategies?: Record<string, BuildStrategy>;
|
|
10
|
+
pageConfigs?: Record<string, PageConfig> | PageConfigFunction;
|
|
11
|
+
}
|
|
12
|
+
interface BuildStrategy {
|
|
13
|
+
viteConfig?: Omit<UserConfig, 'plugins' | 'build'> & {
|
|
14
|
+
build?: BuildOptions;
|
|
15
|
+
};
|
|
16
|
+
output?: {
|
|
17
|
+
format?: 'es' | 'cjs' | 'umd' | 'iife';
|
|
18
|
+
dir?: string;
|
|
19
|
+
entryFileNames?: string;
|
|
20
|
+
chunkFileNames?: string;
|
|
21
|
+
assetFileNames?: string;
|
|
22
|
+
globals?: Record<string, string>;
|
|
23
|
+
external?: string | string[] | ((id: string) => boolean);
|
|
24
|
+
};
|
|
25
|
+
build?: {
|
|
26
|
+
target?: string | string[];
|
|
27
|
+
minify?: boolean | 'terser' | 'esbuild';
|
|
28
|
+
sourcemap?: boolean | 'inline' | 'hidden';
|
|
29
|
+
lib?: boolean | {
|
|
30
|
+
entry: string | string[] | {
|
|
31
|
+
[entryAlias: string]: string;
|
|
32
|
+
};
|
|
33
|
+
name?: string;
|
|
34
|
+
formats?: ('es' | 'cjs' | 'umd' | 'iife')[];
|
|
35
|
+
fileName?: string | ((format: string, entryName: string) => string);
|
|
36
|
+
};
|
|
37
|
+
cssCodeSplit?: boolean;
|
|
38
|
+
cssTarget?: string | string[];
|
|
39
|
+
rollupOptions?: any;
|
|
40
|
+
reportCompressedSize?: boolean;
|
|
41
|
+
chunkSizeWarningLimit?: number;
|
|
42
|
+
assetsDir?: string;
|
|
43
|
+
emptyOutDir?: boolean;
|
|
44
|
+
};
|
|
45
|
+
define?: Record<string, any>;
|
|
46
|
+
alias?: Record<string, string>;
|
|
47
|
+
server?: {
|
|
48
|
+
port?: number;
|
|
49
|
+
host?: string | boolean;
|
|
50
|
+
https?: boolean;
|
|
51
|
+
cors?: boolean;
|
|
52
|
+
headers?: Record<string, string>;
|
|
53
|
+
};
|
|
54
|
+
css?: {
|
|
55
|
+
modules?: any;
|
|
56
|
+
postcss?: any;
|
|
57
|
+
preprocessorOptions?: Record<string, any>;
|
|
58
|
+
devSourcemap?: boolean;
|
|
59
|
+
};
|
|
60
|
+
optimizeDeps?: {
|
|
61
|
+
entries?: string | string[];
|
|
62
|
+
exclude?: string[];
|
|
63
|
+
include?: string[];
|
|
64
|
+
esbuildOptions?: any;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
interface PageConfigBase {
|
|
68
|
+
strategy?: string;
|
|
69
|
+
template?: string;
|
|
70
|
+
exclude?: string[];
|
|
71
|
+
define?: Record<string, any>;
|
|
72
|
+
alias?: Record<string, string>;
|
|
73
|
+
build?: Partial<BuildStrategy['build']>;
|
|
74
|
+
match?: string | string[];
|
|
75
|
+
}
|
|
76
|
+
interface PageConfig extends PageConfigBase {
|
|
77
|
+
}
|
|
78
|
+
interface PageConfigContext {
|
|
79
|
+
pageName: string;
|
|
80
|
+
filePath: string;
|
|
81
|
+
relativePath: string;
|
|
82
|
+
strategy?: string;
|
|
83
|
+
isMatched?: boolean;
|
|
84
|
+
}
|
|
85
|
+
type PageConfigFunction = (context: PageConfigContext) => PageConfig | null;
|
|
86
|
+
|
|
87
|
+
declare function viteMultiPage(options?: MultiPageOptions): Plugin;
|
|
88
|
+
|
|
89
|
+
export { type MultiPageOptions, viteMultiPage as default, viteMultiPage };
|