@meng-xi/vite-plugin 0.1.0 → 0.1.2
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/README-en.md +264 -533
- package/README.md +253 -522
- package/dist/common/format/index.cjs +1 -0
- package/dist/common/format/index.d.cts +156 -0
- package/dist/common/format/index.d.mts +156 -0
- package/dist/common/format/index.d.ts +156 -0
- package/dist/common/format/index.mjs +1 -0
- package/dist/common/fs/index.cjs +1 -0
- package/dist/common/fs/index.d.cts +150 -0
- package/dist/common/fs/index.d.mts +150 -0
- package/dist/common/fs/index.d.ts +150 -0
- package/dist/common/fs/index.mjs +1 -0
- package/dist/common/html/index.cjs +2 -0
- package/dist/common/html/index.d.cts +109 -0
- package/dist/common/html/index.d.mts +109 -0
- package/dist/common/html/index.d.ts +109 -0
- package/dist/common/html/index.mjs +2 -0
- package/dist/common/index.cjs +1 -1
- package/dist/common/index.d.cts +7 -417
- package/dist/common/index.d.mts +7 -417
- package/dist/common/index.d.ts +7 -417
- package/dist/common/index.mjs +1 -1
- package/dist/common/object/index.cjs +1 -0
- package/dist/common/object/index.d.cts +30 -0
- package/dist/common/object/index.d.mts +30 -0
- package/dist/common/object/index.d.ts +30 -0
- package/dist/common/object/index.mjs +1 -0
- package/dist/common/script/index.cjs +1 -0
- package/dist/common/script/index.d.cts +54 -0
- package/dist/common/script/index.d.mts +54 -0
- package/dist/common/script/index.d.ts +54 -0
- package/dist/common/script/index.mjs +1 -0
- package/dist/common/validation/index.cjs +1 -0
- package/dist/common/validation/index.d.cts +93 -0
- package/dist/common/validation/index.d.mts +93 -0
- package/dist/common/validation/index.d.ts +93 -0
- package/dist/common/validation/index.mjs +1 -0
- package/dist/factory/index.cjs +1 -1
- package/dist/factory/index.d.cts +1 -1
- package/dist/factory/index.d.mts +1 -1
- package/dist/factory/index.d.ts +1 -1
- package/dist/factory/index.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +16 -3
- package/dist/index.d.mts +16 -3
- package/dist/index.d.ts +16 -3
- package/dist/index.mjs +1 -1
- package/dist/plugins/buildProgress/index.cjs +2 -0
- package/dist/plugins/buildProgress/index.d.cts +187 -0
- package/dist/plugins/buildProgress/index.d.mts +187 -0
- package/dist/plugins/buildProgress/index.d.ts +187 -0
- package/dist/plugins/buildProgress/index.mjs +2 -0
- package/dist/plugins/compressAssets/index.cjs +1 -0
- package/dist/plugins/compressAssets/index.d.cts +132 -0
- package/dist/plugins/compressAssets/index.d.mts +132 -0
- package/dist/plugins/compressAssets/index.d.ts +132 -0
- package/dist/plugins/compressAssets/index.mjs +1 -0
- package/dist/plugins/copyFile/index.cjs +1 -0
- package/dist/plugins/copyFile/index.d.cts +78 -0
- package/dist/plugins/copyFile/index.d.mts +78 -0
- package/dist/plugins/copyFile/index.d.ts +78 -0
- package/dist/plugins/copyFile/index.mjs +1 -0
- package/dist/plugins/faviconManager/index.cjs +1 -0
- package/dist/plugins/faviconManager/index.d.cts +143 -0
- package/dist/plugins/faviconManager/index.d.mts +143 -0
- package/dist/plugins/faviconManager/index.d.ts +143 -0
- package/dist/plugins/faviconManager/index.mjs +1 -0
- package/dist/plugins/generateRouter/index.cjs +35 -0
- package/dist/plugins/generateRouter/index.d.cts +215 -0
- package/dist/plugins/generateRouter/index.d.mts +215 -0
- package/dist/plugins/generateRouter/index.d.ts +215 -0
- package/dist/plugins/generateRouter/index.mjs +35 -0
- package/dist/plugins/generateVersion/index.cjs +1 -0
- package/dist/plugins/generateVersion/index.d.cts +184 -0
- package/dist/plugins/generateVersion/index.d.mts +184 -0
- package/dist/plugins/generateVersion/index.d.ts +184 -0
- package/dist/plugins/generateVersion/index.mjs +1 -0
- package/dist/plugins/htmlInject/index.cjs +7 -0
- package/dist/plugins/htmlInject/index.d.cts +278 -0
- package/dist/plugins/htmlInject/index.d.mts +278 -0
- package/dist/plugins/htmlInject/index.d.ts +278 -0
- package/dist/plugins/htmlInject/index.mjs +7 -0
- package/dist/plugins/index.cjs +1 -1
- package/dist/plugins/index.d.cts +11 -1714
- package/dist/plugins/index.d.mts +11 -1714
- package/dist/plugins/index.d.ts +11 -1714
- package/dist/plugins/index.mjs +1 -1
- package/dist/plugins/loadingManager/index.cjs +487 -0
- package/dist/plugins/loadingManager/index.d.cts +769 -0
- package/dist/plugins/loadingManager/index.d.mts +769 -0
- package/dist/plugins/loadingManager/index.d.ts +769 -0
- package/dist/plugins/loadingManager/index.mjs +487 -0
- package/dist/plugins/versionUpdateChecker/index.cjs +185 -0
- package/dist/plugins/versionUpdateChecker/index.d.cts +200 -0
- package/dist/plugins/versionUpdateChecker/index.d.mts +200 -0
- package/dist/plugins/versionUpdateChecker/index.d.ts +200 -0
- package/dist/plugins/versionUpdateChecker/index.mjs +185 -0
- package/dist/shared/vite-plugin.Bcg6RW2N.cjs +3 -0
- package/dist/shared/{vite-plugin.CiHfwMiN.d.ts → vite-plugin.DRRlWY8P.d.cts} +50 -0
- package/dist/shared/{vite-plugin.CiHfwMiN.d.cts → vite-plugin.DRRlWY8P.d.mts} +50 -0
- package/dist/shared/{vite-plugin.CiHfwMiN.d.mts → vite-plugin.DRRlWY8P.d.ts} +50 -0
- package/dist/shared/{vite-plugin.B88RyRN8.mjs → vite-plugin.DcExl6jd.mjs} +2 -2
- package/package.json +80 -3
- package/dist/shared/vite-plugin.CawoITTT.cjs +0 -1
- package/dist/shared/vite-plugin.D6Law9Ke.mjs +0 -706
- package/dist/shared/vite-plugin.D8L9KzuW.cjs +0 -706
- package/dist/shared/vite-plugin.DFjf9wFM.mjs +0 -2
- package/dist/shared/vite-plugin.DSb6XzBn.mjs +0 -1
- package/dist/shared/vite-plugin.IGZeStMa.cjs +0 -3
- package/dist/shared/vite-plugin.Tab4qcIM.cjs +0 -2
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { BasePluginOptions, PluginFactory } from '../../factory/index.cjs';
|
|
2
|
+
import 'vite';
|
|
3
|
+
import '../../shared/vite-plugin.CLr0ttuO.cjs';
|
|
4
|
+
import '../../shared/vite-plugin.DRRlWY8P.cjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 版本来源类型
|
|
8
|
+
*
|
|
9
|
+
* @description
|
|
10
|
+
* - 'define': 从 Vite define 注入的全局变量中读取(如 __APP_VERSION__)
|
|
11
|
+
* - 'file': 从版本文件(如 version.json)中读取
|
|
12
|
+
* - 'auto': 自动检测,优先使用 define,回退到 file
|
|
13
|
+
*/
|
|
14
|
+
type VersionSource = 'define' | 'file' | 'auto';
|
|
15
|
+
/**
|
|
16
|
+
* 更新提示 UI 样式
|
|
17
|
+
*
|
|
18
|
+
* @description
|
|
19
|
+
* - 'modal': 居中弹窗,需用户手动操作
|
|
20
|
+
* - 'banner': 顶部横幅,可自动消失或手动关闭
|
|
21
|
+
* - 'toast': 底部轻提示,自动消失
|
|
22
|
+
*/
|
|
23
|
+
type PromptStyle = 'modal' | 'banner' | 'toast';
|
|
24
|
+
/**
|
|
25
|
+
* 版本更新检查器的配置选项接口
|
|
26
|
+
*
|
|
27
|
+
* @interface VersionUpdateCheckerOptions
|
|
28
|
+
*/
|
|
29
|
+
interface VersionUpdateCheckerOptions extends BasePluginOptions {
|
|
30
|
+
/**
|
|
31
|
+
* 当前版本号的来源
|
|
32
|
+
*
|
|
33
|
+
* @default 'auto'
|
|
34
|
+
*/
|
|
35
|
+
versionSource?: VersionSource;
|
|
36
|
+
/**
|
|
37
|
+
* define 模式下的全局变量名
|
|
38
|
+
*
|
|
39
|
+
* @description 当 versionSource 为 'define' 或 'auto' 时,
|
|
40
|
+
* 从此全局变量读取当前构建版本号
|
|
41
|
+
*
|
|
42
|
+
* @default '__APP_VERSION__'
|
|
43
|
+
*/
|
|
44
|
+
defineName?: string;
|
|
45
|
+
/**
|
|
46
|
+
* 版本检查文件的 URL 路径
|
|
47
|
+
*
|
|
48
|
+
* @description 客户端将定期请求此 URL 获取最新版本号,
|
|
49
|
+
* 并与当前版本号对比判断是否有更新
|
|
50
|
+
*
|
|
51
|
+
* @default '/version.json'
|
|
52
|
+
*/
|
|
53
|
+
checkUrl?: string;
|
|
54
|
+
/**
|
|
55
|
+
* 版本检查间隔时间(毫秒)
|
|
56
|
+
*
|
|
57
|
+
* @default 300000(5 分钟)
|
|
58
|
+
*/
|
|
59
|
+
checkInterval?: number;
|
|
60
|
+
/**
|
|
61
|
+
* 页面可见性变化时是否立即检查
|
|
62
|
+
*
|
|
63
|
+
* @description 当用户从其他标签页切回时,立即检查版本更新,
|
|
64
|
+
* 而不是等待下一个定时周期
|
|
65
|
+
*
|
|
66
|
+
* @default true
|
|
67
|
+
*/
|
|
68
|
+
checkOnVisibilityChange?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* 是否在开发模式下启用版本检查
|
|
71
|
+
*
|
|
72
|
+
* @default false
|
|
73
|
+
*/
|
|
74
|
+
enableInDev?: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* 更新提示 UI 样式
|
|
77
|
+
*
|
|
78
|
+
* @default 'modal'
|
|
79
|
+
*/
|
|
80
|
+
promptStyle?: PromptStyle;
|
|
81
|
+
/**
|
|
82
|
+
* 更新提示消息文本
|
|
83
|
+
*
|
|
84
|
+
* @default '发现新版本,是否立即刷新获取最新内容?'
|
|
85
|
+
*/
|
|
86
|
+
promptMessage?: string;
|
|
87
|
+
/**
|
|
88
|
+
* 刷新按钮文本
|
|
89
|
+
*
|
|
90
|
+
* @default '立即刷新'
|
|
91
|
+
*/
|
|
92
|
+
refreshButtonText?: string;
|
|
93
|
+
/**
|
|
94
|
+
* 忽略按钮文本
|
|
95
|
+
*
|
|
96
|
+
* @default '稍后再说'
|
|
97
|
+
*/
|
|
98
|
+
dismissButtonText?: string;
|
|
99
|
+
/**
|
|
100
|
+
* 自定义提示 UI 的 HTML 模板
|
|
101
|
+
*
|
|
102
|
+
* @description 替换内置的提示 UI,模板中可使用以下占位符:
|
|
103
|
+
* - {{message}}: 提示消息
|
|
104
|
+
* - {{currentVersion}}: 当前版本号
|
|
105
|
+
* - {{newVersion}}: 新版本号
|
|
106
|
+
* - {{refreshButton}}: 刷新按钮
|
|
107
|
+
* - {{dismissButton}}: 忽略按钮
|
|
108
|
+
*
|
|
109
|
+
* 模板中不允许包含 <script> 标签
|
|
110
|
+
*/
|
|
111
|
+
customPromptTemplate?: string;
|
|
112
|
+
/**
|
|
113
|
+
* 自定义样式字符串
|
|
114
|
+
*
|
|
115
|
+
* @description 追加到内置样式之后的自定义 CSS
|
|
116
|
+
*/
|
|
117
|
+
customStyle?: string;
|
|
118
|
+
/**
|
|
119
|
+
* 发现新版本时的回调(函数体字符串)
|
|
120
|
+
*
|
|
121
|
+
* @description 回调以函数体字符串形式提供,因为需要注入到客户端代码中。
|
|
122
|
+
* 可用变量:currentVersion、newVersion
|
|
123
|
+
*
|
|
124
|
+
* @example 'console.log("新版本:", newVersion); return true;'
|
|
125
|
+
*/
|
|
126
|
+
onUpdateAvailable?: string;
|
|
127
|
+
/**
|
|
128
|
+
* 用户选择刷新时的回调(函数体字符串)
|
|
129
|
+
*
|
|
130
|
+
* @example 'console.log("用户选择刷新");'
|
|
131
|
+
*/
|
|
132
|
+
onRefresh?: string;
|
|
133
|
+
/**
|
|
134
|
+
* 用户选择忽略时的回调(函数体字符串)
|
|
135
|
+
*
|
|
136
|
+
* @example 'console.log("用户选择忽略");'
|
|
137
|
+
*/
|
|
138
|
+
onDismiss?: string;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* 版本更新检查器插件
|
|
143
|
+
*
|
|
144
|
+
* @param options - 插件配置选项,详见 {@link VersionUpdateCheckerOptions}
|
|
145
|
+
* @returns Vite 插件实例
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* // 基本使用 — 配合 generateVersion 插件
|
|
150
|
+
* generateVersion({
|
|
151
|
+
* format: 'datetime',
|
|
152
|
+
* outputType: 'both',
|
|
153
|
+
* defineName: '__APP_VERSION__'
|
|
154
|
+
* }),
|
|
155
|
+
* versionUpdateChecker()
|
|
156
|
+
*
|
|
157
|
+
* // 自定义检查间隔和提示样式
|
|
158
|
+
* versionUpdateChecker({
|
|
159
|
+
* checkInterval: 60000, // 1 分钟检查一次
|
|
160
|
+
* promptStyle: 'banner' // 顶部横幅提示
|
|
161
|
+
* })
|
|
162
|
+
*
|
|
163
|
+
* // 自定义提示消息和回调
|
|
164
|
+
* versionUpdateChecker({
|
|
165
|
+
* promptMessage: '系统已更新,请刷新页面',
|
|
166
|
+
* onUpdateAvailable: 'console.log("新版本:", newVersion); return true;',
|
|
167
|
+
* onRefresh: 'console.log("用户选择刷新");',
|
|
168
|
+
* onDismiss: 'console.log("用户选择忽略");'
|
|
169
|
+
* })
|
|
170
|
+
*
|
|
171
|
+
* // 开发模式也启用
|
|
172
|
+
* versionUpdateChecker({
|
|
173
|
+
* enableInDev: true,
|
|
174
|
+
* checkInterval: 10000
|
|
175
|
+
* })
|
|
176
|
+
*
|
|
177
|
+
* // 自定义 UI 模板
|
|
178
|
+
* versionUpdateChecker({
|
|
179
|
+
* customPromptTemplate: '<div class="my-update-prompt">{{message}} {{refreshButton}}</div>',
|
|
180
|
+
* customStyle: '.my-update-prompt { background: #333; color: #fff; }'
|
|
181
|
+
* })
|
|
182
|
+
* ```
|
|
183
|
+
*
|
|
184
|
+
* @remarks
|
|
185
|
+
* 该插件通常与 `generateVersion` 插件配合使用:
|
|
186
|
+
* - `generateVersion` 负责在构建时生成版本号并输出到 `version.json` 文件和全局变量
|
|
187
|
+
* - `versionUpdateChecker` 负责在运行时定期检查版本号变更并提示用户刷新
|
|
188
|
+
*
|
|
189
|
+
* 工作原理:
|
|
190
|
+
* 1. 页面加载时,从全局变量(如 `__APP_VERSION__`)读取当前版本号
|
|
191
|
+
* 2. 定期请求 `version.json` 获取最新版本号
|
|
192
|
+
* 3. 当版本号不一致时,显示更新提示 UI
|
|
193
|
+
* 4. 用户点击"立即刷新"后执行 `location.reload()`
|
|
194
|
+
* 5. 用户点击"稍后再说"后隐藏提示,本次会话不再提醒
|
|
195
|
+
* 6. 页面可见性变化时(如从其他标签页切回)立即检查更新
|
|
196
|
+
*/
|
|
197
|
+
declare const versionUpdateChecker: PluginFactory<VersionUpdateCheckerOptions, VersionUpdateCheckerOptions>;
|
|
198
|
+
|
|
199
|
+
export { versionUpdateChecker };
|
|
200
|
+
export type { PromptStyle, VersionSource, VersionUpdateCheckerOptions };
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { BasePluginOptions, PluginFactory } from '../../factory/index.mjs';
|
|
2
|
+
import 'vite';
|
|
3
|
+
import '../../shared/vite-plugin.CLr0ttuO.mjs';
|
|
4
|
+
import '../../shared/vite-plugin.DRRlWY8P.mjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 版本来源类型
|
|
8
|
+
*
|
|
9
|
+
* @description
|
|
10
|
+
* - 'define': 从 Vite define 注入的全局变量中读取(如 __APP_VERSION__)
|
|
11
|
+
* - 'file': 从版本文件(如 version.json)中读取
|
|
12
|
+
* - 'auto': 自动检测,优先使用 define,回退到 file
|
|
13
|
+
*/
|
|
14
|
+
type VersionSource = 'define' | 'file' | 'auto';
|
|
15
|
+
/**
|
|
16
|
+
* 更新提示 UI 样式
|
|
17
|
+
*
|
|
18
|
+
* @description
|
|
19
|
+
* - 'modal': 居中弹窗,需用户手动操作
|
|
20
|
+
* - 'banner': 顶部横幅,可自动消失或手动关闭
|
|
21
|
+
* - 'toast': 底部轻提示,自动消失
|
|
22
|
+
*/
|
|
23
|
+
type PromptStyle = 'modal' | 'banner' | 'toast';
|
|
24
|
+
/**
|
|
25
|
+
* 版本更新检查器的配置选项接口
|
|
26
|
+
*
|
|
27
|
+
* @interface VersionUpdateCheckerOptions
|
|
28
|
+
*/
|
|
29
|
+
interface VersionUpdateCheckerOptions extends BasePluginOptions {
|
|
30
|
+
/**
|
|
31
|
+
* 当前版本号的来源
|
|
32
|
+
*
|
|
33
|
+
* @default 'auto'
|
|
34
|
+
*/
|
|
35
|
+
versionSource?: VersionSource;
|
|
36
|
+
/**
|
|
37
|
+
* define 模式下的全局变量名
|
|
38
|
+
*
|
|
39
|
+
* @description 当 versionSource 为 'define' 或 'auto' 时,
|
|
40
|
+
* 从此全局变量读取当前构建版本号
|
|
41
|
+
*
|
|
42
|
+
* @default '__APP_VERSION__'
|
|
43
|
+
*/
|
|
44
|
+
defineName?: string;
|
|
45
|
+
/**
|
|
46
|
+
* 版本检查文件的 URL 路径
|
|
47
|
+
*
|
|
48
|
+
* @description 客户端将定期请求此 URL 获取最新版本号,
|
|
49
|
+
* 并与当前版本号对比判断是否有更新
|
|
50
|
+
*
|
|
51
|
+
* @default '/version.json'
|
|
52
|
+
*/
|
|
53
|
+
checkUrl?: string;
|
|
54
|
+
/**
|
|
55
|
+
* 版本检查间隔时间(毫秒)
|
|
56
|
+
*
|
|
57
|
+
* @default 300000(5 分钟)
|
|
58
|
+
*/
|
|
59
|
+
checkInterval?: number;
|
|
60
|
+
/**
|
|
61
|
+
* 页面可见性变化时是否立即检查
|
|
62
|
+
*
|
|
63
|
+
* @description 当用户从其他标签页切回时,立即检查版本更新,
|
|
64
|
+
* 而不是等待下一个定时周期
|
|
65
|
+
*
|
|
66
|
+
* @default true
|
|
67
|
+
*/
|
|
68
|
+
checkOnVisibilityChange?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* 是否在开发模式下启用版本检查
|
|
71
|
+
*
|
|
72
|
+
* @default false
|
|
73
|
+
*/
|
|
74
|
+
enableInDev?: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* 更新提示 UI 样式
|
|
77
|
+
*
|
|
78
|
+
* @default 'modal'
|
|
79
|
+
*/
|
|
80
|
+
promptStyle?: PromptStyle;
|
|
81
|
+
/**
|
|
82
|
+
* 更新提示消息文本
|
|
83
|
+
*
|
|
84
|
+
* @default '发现新版本,是否立即刷新获取最新内容?'
|
|
85
|
+
*/
|
|
86
|
+
promptMessage?: string;
|
|
87
|
+
/**
|
|
88
|
+
* 刷新按钮文本
|
|
89
|
+
*
|
|
90
|
+
* @default '立即刷新'
|
|
91
|
+
*/
|
|
92
|
+
refreshButtonText?: string;
|
|
93
|
+
/**
|
|
94
|
+
* 忽略按钮文本
|
|
95
|
+
*
|
|
96
|
+
* @default '稍后再说'
|
|
97
|
+
*/
|
|
98
|
+
dismissButtonText?: string;
|
|
99
|
+
/**
|
|
100
|
+
* 自定义提示 UI 的 HTML 模板
|
|
101
|
+
*
|
|
102
|
+
* @description 替换内置的提示 UI,模板中可使用以下占位符:
|
|
103
|
+
* - {{message}}: 提示消息
|
|
104
|
+
* - {{currentVersion}}: 当前版本号
|
|
105
|
+
* - {{newVersion}}: 新版本号
|
|
106
|
+
* - {{refreshButton}}: 刷新按钮
|
|
107
|
+
* - {{dismissButton}}: 忽略按钮
|
|
108
|
+
*
|
|
109
|
+
* 模板中不允许包含 <script> 标签
|
|
110
|
+
*/
|
|
111
|
+
customPromptTemplate?: string;
|
|
112
|
+
/**
|
|
113
|
+
* 自定义样式字符串
|
|
114
|
+
*
|
|
115
|
+
* @description 追加到内置样式之后的自定义 CSS
|
|
116
|
+
*/
|
|
117
|
+
customStyle?: string;
|
|
118
|
+
/**
|
|
119
|
+
* 发现新版本时的回调(函数体字符串)
|
|
120
|
+
*
|
|
121
|
+
* @description 回调以函数体字符串形式提供,因为需要注入到客户端代码中。
|
|
122
|
+
* 可用变量:currentVersion、newVersion
|
|
123
|
+
*
|
|
124
|
+
* @example 'console.log("新版本:", newVersion); return true;'
|
|
125
|
+
*/
|
|
126
|
+
onUpdateAvailable?: string;
|
|
127
|
+
/**
|
|
128
|
+
* 用户选择刷新时的回调(函数体字符串)
|
|
129
|
+
*
|
|
130
|
+
* @example 'console.log("用户选择刷新");'
|
|
131
|
+
*/
|
|
132
|
+
onRefresh?: string;
|
|
133
|
+
/**
|
|
134
|
+
* 用户选择忽略时的回调(函数体字符串)
|
|
135
|
+
*
|
|
136
|
+
* @example 'console.log("用户选择忽略");'
|
|
137
|
+
*/
|
|
138
|
+
onDismiss?: string;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* 版本更新检查器插件
|
|
143
|
+
*
|
|
144
|
+
* @param options - 插件配置选项,详见 {@link VersionUpdateCheckerOptions}
|
|
145
|
+
* @returns Vite 插件实例
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* // 基本使用 — 配合 generateVersion 插件
|
|
150
|
+
* generateVersion({
|
|
151
|
+
* format: 'datetime',
|
|
152
|
+
* outputType: 'both',
|
|
153
|
+
* defineName: '__APP_VERSION__'
|
|
154
|
+
* }),
|
|
155
|
+
* versionUpdateChecker()
|
|
156
|
+
*
|
|
157
|
+
* // 自定义检查间隔和提示样式
|
|
158
|
+
* versionUpdateChecker({
|
|
159
|
+
* checkInterval: 60000, // 1 分钟检查一次
|
|
160
|
+
* promptStyle: 'banner' // 顶部横幅提示
|
|
161
|
+
* })
|
|
162
|
+
*
|
|
163
|
+
* // 自定义提示消息和回调
|
|
164
|
+
* versionUpdateChecker({
|
|
165
|
+
* promptMessage: '系统已更新,请刷新页面',
|
|
166
|
+
* onUpdateAvailable: 'console.log("新版本:", newVersion); return true;',
|
|
167
|
+
* onRefresh: 'console.log("用户选择刷新");',
|
|
168
|
+
* onDismiss: 'console.log("用户选择忽略");'
|
|
169
|
+
* })
|
|
170
|
+
*
|
|
171
|
+
* // 开发模式也启用
|
|
172
|
+
* versionUpdateChecker({
|
|
173
|
+
* enableInDev: true,
|
|
174
|
+
* checkInterval: 10000
|
|
175
|
+
* })
|
|
176
|
+
*
|
|
177
|
+
* // 自定义 UI 模板
|
|
178
|
+
* versionUpdateChecker({
|
|
179
|
+
* customPromptTemplate: '<div class="my-update-prompt">{{message}} {{refreshButton}}</div>',
|
|
180
|
+
* customStyle: '.my-update-prompt { background: #333; color: #fff; }'
|
|
181
|
+
* })
|
|
182
|
+
* ```
|
|
183
|
+
*
|
|
184
|
+
* @remarks
|
|
185
|
+
* 该插件通常与 `generateVersion` 插件配合使用:
|
|
186
|
+
* - `generateVersion` 负责在构建时生成版本号并输出到 `version.json` 文件和全局变量
|
|
187
|
+
* - `versionUpdateChecker` 负责在运行时定期检查版本号变更并提示用户刷新
|
|
188
|
+
*
|
|
189
|
+
* 工作原理:
|
|
190
|
+
* 1. 页面加载时,从全局变量(如 `__APP_VERSION__`)读取当前版本号
|
|
191
|
+
* 2. 定期请求 `version.json` 获取最新版本号
|
|
192
|
+
* 3. 当版本号不一致时,显示更新提示 UI
|
|
193
|
+
* 4. 用户点击"立即刷新"后执行 `location.reload()`
|
|
194
|
+
* 5. 用户点击"稍后再说"后隐藏提示,本次会话不再提醒
|
|
195
|
+
* 6. 页面可见性变化时(如从其他标签页切回)立即检查更新
|
|
196
|
+
*/
|
|
197
|
+
declare const versionUpdateChecker: PluginFactory<VersionUpdateCheckerOptions, VersionUpdateCheckerOptions>;
|
|
198
|
+
|
|
199
|
+
export { versionUpdateChecker };
|
|
200
|
+
export type { PromptStyle, VersionSource, VersionUpdateCheckerOptions };
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { BasePluginOptions, PluginFactory } from '../../factory/index.js';
|
|
2
|
+
import 'vite';
|
|
3
|
+
import '../../shared/vite-plugin.CLr0ttuO.js';
|
|
4
|
+
import '../../shared/vite-plugin.DRRlWY8P.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 版本来源类型
|
|
8
|
+
*
|
|
9
|
+
* @description
|
|
10
|
+
* - 'define': 从 Vite define 注入的全局变量中读取(如 __APP_VERSION__)
|
|
11
|
+
* - 'file': 从版本文件(如 version.json)中读取
|
|
12
|
+
* - 'auto': 自动检测,优先使用 define,回退到 file
|
|
13
|
+
*/
|
|
14
|
+
type VersionSource = 'define' | 'file' | 'auto';
|
|
15
|
+
/**
|
|
16
|
+
* 更新提示 UI 样式
|
|
17
|
+
*
|
|
18
|
+
* @description
|
|
19
|
+
* - 'modal': 居中弹窗,需用户手动操作
|
|
20
|
+
* - 'banner': 顶部横幅,可自动消失或手动关闭
|
|
21
|
+
* - 'toast': 底部轻提示,自动消失
|
|
22
|
+
*/
|
|
23
|
+
type PromptStyle = 'modal' | 'banner' | 'toast';
|
|
24
|
+
/**
|
|
25
|
+
* 版本更新检查器的配置选项接口
|
|
26
|
+
*
|
|
27
|
+
* @interface VersionUpdateCheckerOptions
|
|
28
|
+
*/
|
|
29
|
+
interface VersionUpdateCheckerOptions extends BasePluginOptions {
|
|
30
|
+
/**
|
|
31
|
+
* 当前版本号的来源
|
|
32
|
+
*
|
|
33
|
+
* @default 'auto'
|
|
34
|
+
*/
|
|
35
|
+
versionSource?: VersionSource;
|
|
36
|
+
/**
|
|
37
|
+
* define 模式下的全局变量名
|
|
38
|
+
*
|
|
39
|
+
* @description 当 versionSource 为 'define' 或 'auto' 时,
|
|
40
|
+
* 从此全局变量读取当前构建版本号
|
|
41
|
+
*
|
|
42
|
+
* @default '__APP_VERSION__'
|
|
43
|
+
*/
|
|
44
|
+
defineName?: string;
|
|
45
|
+
/**
|
|
46
|
+
* 版本检查文件的 URL 路径
|
|
47
|
+
*
|
|
48
|
+
* @description 客户端将定期请求此 URL 获取最新版本号,
|
|
49
|
+
* 并与当前版本号对比判断是否有更新
|
|
50
|
+
*
|
|
51
|
+
* @default '/version.json'
|
|
52
|
+
*/
|
|
53
|
+
checkUrl?: string;
|
|
54
|
+
/**
|
|
55
|
+
* 版本检查间隔时间(毫秒)
|
|
56
|
+
*
|
|
57
|
+
* @default 300000(5 分钟)
|
|
58
|
+
*/
|
|
59
|
+
checkInterval?: number;
|
|
60
|
+
/**
|
|
61
|
+
* 页面可见性变化时是否立即检查
|
|
62
|
+
*
|
|
63
|
+
* @description 当用户从其他标签页切回时,立即检查版本更新,
|
|
64
|
+
* 而不是等待下一个定时周期
|
|
65
|
+
*
|
|
66
|
+
* @default true
|
|
67
|
+
*/
|
|
68
|
+
checkOnVisibilityChange?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* 是否在开发模式下启用版本检查
|
|
71
|
+
*
|
|
72
|
+
* @default false
|
|
73
|
+
*/
|
|
74
|
+
enableInDev?: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* 更新提示 UI 样式
|
|
77
|
+
*
|
|
78
|
+
* @default 'modal'
|
|
79
|
+
*/
|
|
80
|
+
promptStyle?: PromptStyle;
|
|
81
|
+
/**
|
|
82
|
+
* 更新提示消息文本
|
|
83
|
+
*
|
|
84
|
+
* @default '发现新版本,是否立即刷新获取最新内容?'
|
|
85
|
+
*/
|
|
86
|
+
promptMessage?: string;
|
|
87
|
+
/**
|
|
88
|
+
* 刷新按钮文本
|
|
89
|
+
*
|
|
90
|
+
* @default '立即刷新'
|
|
91
|
+
*/
|
|
92
|
+
refreshButtonText?: string;
|
|
93
|
+
/**
|
|
94
|
+
* 忽略按钮文本
|
|
95
|
+
*
|
|
96
|
+
* @default '稍后再说'
|
|
97
|
+
*/
|
|
98
|
+
dismissButtonText?: string;
|
|
99
|
+
/**
|
|
100
|
+
* 自定义提示 UI 的 HTML 模板
|
|
101
|
+
*
|
|
102
|
+
* @description 替换内置的提示 UI,模板中可使用以下占位符:
|
|
103
|
+
* - {{message}}: 提示消息
|
|
104
|
+
* - {{currentVersion}}: 当前版本号
|
|
105
|
+
* - {{newVersion}}: 新版本号
|
|
106
|
+
* - {{refreshButton}}: 刷新按钮
|
|
107
|
+
* - {{dismissButton}}: 忽略按钮
|
|
108
|
+
*
|
|
109
|
+
* 模板中不允许包含 <script> 标签
|
|
110
|
+
*/
|
|
111
|
+
customPromptTemplate?: string;
|
|
112
|
+
/**
|
|
113
|
+
* 自定义样式字符串
|
|
114
|
+
*
|
|
115
|
+
* @description 追加到内置样式之后的自定义 CSS
|
|
116
|
+
*/
|
|
117
|
+
customStyle?: string;
|
|
118
|
+
/**
|
|
119
|
+
* 发现新版本时的回调(函数体字符串)
|
|
120
|
+
*
|
|
121
|
+
* @description 回调以函数体字符串形式提供,因为需要注入到客户端代码中。
|
|
122
|
+
* 可用变量:currentVersion、newVersion
|
|
123
|
+
*
|
|
124
|
+
* @example 'console.log("新版本:", newVersion); return true;'
|
|
125
|
+
*/
|
|
126
|
+
onUpdateAvailable?: string;
|
|
127
|
+
/**
|
|
128
|
+
* 用户选择刷新时的回调(函数体字符串)
|
|
129
|
+
*
|
|
130
|
+
* @example 'console.log("用户选择刷新");'
|
|
131
|
+
*/
|
|
132
|
+
onRefresh?: string;
|
|
133
|
+
/**
|
|
134
|
+
* 用户选择忽略时的回调(函数体字符串)
|
|
135
|
+
*
|
|
136
|
+
* @example 'console.log("用户选择忽略");'
|
|
137
|
+
*/
|
|
138
|
+
onDismiss?: string;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* 版本更新检查器插件
|
|
143
|
+
*
|
|
144
|
+
* @param options - 插件配置选项,详见 {@link VersionUpdateCheckerOptions}
|
|
145
|
+
* @returns Vite 插件实例
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* // 基本使用 — 配合 generateVersion 插件
|
|
150
|
+
* generateVersion({
|
|
151
|
+
* format: 'datetime',
|
|
152
|
+
* outputType: 'both',
|
|
153
|
+
* defineName: '__APP_VERSION__'
|
|
154
|
+
* }),
|
|
155
|
+
* versionUpdateChecker()
|
|
156
|
+
*
|
|
157
|
+
* // 自定义检查间隔和提示样式
|
|
158
|
+
* versionUpdateChecker({
|
|
159
|
+
* checkInterval: 60000, // 1 分钟检查一次
|
|
160
|
+
* promptStyle: 'banner' // 顶部横幅提示
|
|
161
|
+
* })
|
|
162
|
+
*
|
|
163
|
+
* // 自定义提示消息和回调
|
|
164
|
+
* versionUpdateChecker({
|
|
165
|
+
* promptMessage: '系统已更新,请刷新页面',
|
|
166
|
+
* onUpdateAvailable: 'console.log("新版本:", newVersion); return true;',
|
|
167
|
+
* onRefresh: 'console.log("用户选择刷新");',
|
|
168
|
+
* onDismiss: 'console.log("用户选择忽略");'
|
|
169
|
+
* })
|
|
170
|
+
*
|
|
171
|
+
* // 开发模式也启用
|
|
172
|
+
* versionUpdateChecker({
|
|
173
|
+
* enableInDev: true,
|
|
174
|
+
* checkInterval: 10000
|
|
175
|
+
* })
|
|
176
|
+
*
|
|
177
|
+
* // 自定义 UI 模板
|
|
178
|
+
* versionUpdateChecker({
|
|
179
|
+
* customPromptTemplate: '<div class="my-update-prompt">{{message}} {{refreshButton}}</div>',
|
|
180
|
+
* customStyle: '.my-update-prompt { background: #333; color: #fff; }'
|
|
181
|
+
* })
|
|
182
|
+
* ```
|
|
183
|
+
*
|
|
184
|
+
* @remarks
|
|
185
|
+
* 该插件通常与 `generateVersion` 插件配合使用:
|
|
186
|
+
* - `generateVersion` 负责在构建时生成版本号并输出到 `version.json` 文件和全局变量
|
|
187
|
+
* - `versionUpdateChecker` 负责在运行时定期检查版本号变更并提示用户刷新
|
|
188
|
+
*
|
|
189
|
+
* 工作原理:
|
|
190
|
+
* 1. 页面加载时,从全局变量(如 `__APP_VERSION__`)读取当前版本号
|
|
191
|
+
* 2. 定期请求 `version.json` 获取最新版本号
|
|
192
|
+
* 3. 当版本号不一致时,显示更新提示 UI
|
|
193
|
+
* 4. 用户点击"立即刷新"后执行 `location.reload()`
|
|
194
|
+
* 5. 用户点击"稍后再说"后隐藏提示,本次会话不再提醒
|
|
195
|
+
* 6. 页面可见性变化时(如从其他标签页切回)立即检查更新
|
|
196
|
+
*/
|
|
197
|
+
declare const versionUpdateChecker: PluginFactory<VersionUpdateCheckerOptions, VersionUpdateCheckerOptions>;
|
|
198
|
+
|
|
199
|
+
export { versionUpdateChecker };
|
|
200
|
+
export type { PromptStyle, VersionSource, VersionUpdateCheckerOptions };
|