vite-plugin-sw-offline 1.0.0 → 1.0.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.md +35 -32
- package/package.json +1 -1
- package/src/index.js +2 -12
package/README.md
CHANGED
|
@@ -46,30 +46,31 @@ npm install vite-plugin-sw-offline -D
|
|
|
46
46
|
npm install vite -D
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
本包为 **CommonJS**(`main` → `src/index.js
|
|
50
|
-
|
|
51
|
-
```js
|
|
52
|
-
import { createRequire } from 'node:module';
|
|
53
|
-
const require = createRequire(import.meta.url);
|
|
54
|
-
const { vitePluginSwOffline } = require('vite-plugin-sw-offline');
|
|
55
|
-
```
|
|
49
|
+
本包为 **CommonJS**(`main` → `src/index.js`),在 Vite 的 ESM 配置文件中可直接 `import` 使用。
|
|
56
50
|
|
|
57
51
|
## 快速接入
|
|
58
52
|
|
|
59
|
-
### 1. `vite.config.
|
|
53
|
+
### 1. `vite.config.ts`
|
|
60
54
|
|
|
61
|
-
```
|
|
62
|
-
|
|
55
|
+
```ts
|
|
56
|
+
import { defineConfig } from 'vite';
|
|
57
|
+
import { vitePluginSwOffline } from 'vite-plugin-sw-offline';
|
|
63
58
|
|
|
64
59
|
export default defineConfig({
|
|
65
60
|
plugins: [
|
|
66
61
|
vitePluginSwOffline({
|
|
62
|
+
// 未传 CLI --outDir 时的构建产出目录(默认 dist)
|
|
67
63
|
outDir: 'dist',
|
|
64
|
+
// 离线页 Logo,注入 __OFFLINE_LOGO__ 并参与 SW 预缓存
|
|
68
65
|
offlineLogoPath: '/static/logos/your-logo.png',
|
|
66
|
+
// 离线页打字机展示的域名文案
|
|
69
67
|
offlineDomain: 'https://www.example.com',
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
//
|
|
68
|
+
// 可走 SWR 的 API 路径白名单(pathname 包含即匹配);不传则为空
|
|
69
|
+
cacheableApiPaths: ['/user/getUserInfo.do', '/config/queryConfig.do'],
|
|
70
|
+
// 导航前外网探测 URL,空则探测同源 /sw.js;见「维护接口探测」
|
|
71
|
+
// networkProbeUrl: () => 'https://api.example.com/wh/maintain/checkMaintain?productCode=demo',
|
|
72
|
+
// SW 超时、缓存条数等,对应 sw.js 内 __SW_RT_*__ 占位符
|
|
73
|
+
// serviceWorker: { apiTimeout: 45000, networkProbeTimeout: 15000 },
|
|
73
74
|
})
|
|
74
75
|
]
|
|
75
76
|
});
|
|
@@ -82,6 +83,7 @@ export default defineConfig({
|
|
|
82
83
|
在入口 HTML 引入注册脚本,并保留版本占位(构建时由插件替换):
|
|
83
84
|
|
|
84
85
|
```html
|
|
86
|
+
<!-- 构建时 __SW_REGISTER_VERSION__ 会替换为 swVersion,用于破坏 SW 脚本缓存 -->
|
|
85
87
|
<script src="/sw-register.js?v=__SW_REGISTER_VERSION__"></script>
|
|
86
88
|
```
|
|
87
89
|
|
|
@@ -97,17 +99,17 @@ export const CACHEABLE_SW_API_PATHS = [
|
|
|
97
99
|
];
|
|
98
100
|
```
|
|
99
101
|
|
|
100
|
-
在 `vite.config.
|
|
101
|
-
|
|
102
|
-
### 4. 本地 monorepo 引用
|
|
102
|
+
在 `vite.config.ts` 中引入并传入:
|
|
103
103
|
|
|
104
|
-
|
|
104
|
+
```ts
|
|
105
|
+
import { CACHEABLE_SW_API_PATHS } from './src/configs/sw-cacheable-api-paths.js';
|
|
105
106
|
|
|
106
|
-
|
|
107
|
-
|
|
107
|
+
// vitePluginSwOffline({ ... }) 内
|
|
108
|
+
// 可缓存 API 路径白名单,与独立配置文件保持一致便于 Code Review
|
|
109
|
+
cacheableApiPaths: CACHEABLE_SW_API_PATHS,
|
|
108
110
|
```
|
|
109
111
|
|
|
110
|
-
|
|
112
|
+
不传则 API 白名单为空(不缓存任何 API,**生产务必显式配置自己的列表**)。
|
|
111
113
|
|
|
112
114
|
## 版本号(swVersion)
|
|
113
115
|
|
|
@@ -219,12 +221,13 @@ function buildSwNetworkProbeUrl(def, productCode) {
|
|
|
219
221
|
|
|
220
222
|
### 回调接入示例
|
|
221
223
|
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
|
|
224
|
+
```ts
|
|
225
|
+
import configEnv from './src/configs/env/xxx/yyy.js';
|
|
226
|
+
import SERIES from './src/configs/series/...';
|
|
225
227
|
|
|
228
|
+
// defineConfig plugins 内
|
|
226
229
|
vitePluginSwOffline({
|
|
227
|
-
networkProbeUrl: (
|
|
230
|
+
networkProbeUrl: () => buildSwNetworkProbeUrl(configEnv.default, SERIES.name),
|
|
228
231
|
// networkProbeUrl: 'https://api.example.com/wh/maintain/checkMaintain?productCode=demo',
|
|
229
232
|
});
|
|
230
233
|
```
|
|
@@ -265,7 +268,7 @@ vitePluginSwOffline({
|
|
|
265
268
|
| `offlineLogoPath` | `string` | 离线页 `__OFFLINE_LOGO__` 与 SW 预缓存 Logo;支持 `https://`、根路径 `/`、`?v=`。 |
|
|
266
269
|
| `offlineDomain` | `string` | 离线页打字机文案 `__OFFLINE_DOMAIN__`。 |
|
|
267
270
|
| `offlineTemplatePath` | `string` | 自定义离线页 HTML(绝对路径或相对 `process.cwd()`)。不存在则回退默认模板。 |
|
|
268
|
-
| `cacheableApiPaths` | `string[]` | API 路径白名单(pathname 包含即走 SWR
|
|
271
|
+
| `cacheableApiPaths` | `string[]` | API 路径白名单(pathname 包含即走 SWR)。不传则为空列表。 |
|
|
269
272
|
| `robotsTxtContent` | `string` | 非空时覆盖产出目录 `robots.txt`。 |
|
|
270
273
|
| `serviceWorker` | `object` | SW 数值参数,见下表。 |
|
|
271
274
|
|
|
@@ -283,8 +286,9 @@ vitePluginSwOffline({
|
|
|
283
286
|
|
|
284
287
|
预览合并结果:
|
|
285
288
|
|
|
286
|
-
```
|
|
287
|
-
|
|
289
|
+
```ts
|
|
290
|
+
import { getDefaultServiceWorker, resolveServiceWorker } from 'vite-plugin-sw-offline';
|
|
291
|
+
|
|
288
292
|
resolveServiceWorker({ serviceWorker: { apiTimeout: 5000 } });
|
|
289
293
|
```
|
|
290
294
|
|
|
@@ -327,8 +331,8 @@ resolveServiceWorker({ serviceWorker: { apiTimeout: 5000 } });
|
|
|
327
331
|
|
|
328
332
|
## 程序化导出
|
|
329
333
|
|
|
330
|
-
```
|
|
331
|
-
|
|
334
|
+
```ts
|
|
335
|
+
import {
|
|
332
336
|
vitePluginSwOffline,
|
|
333
337
|
getRuntimeDir,
|
|
334
338
|
getDefaultOfflineTemplatePath,
|
|
@@ -338,7 +342,7 @@ const {
|
|
|
338
342
|
resolveServiceWorker,
|
|
339
343
|
normalizeOfflineLogoPath,
|
|
340
344
|
injectOfflineHtml
|
|
341
|
-
}
|
|
345
|
+
} from 'vite-plugin-sw-offline';
|
|
342
346
|
```
|
|
343
347
|
|
|
344
348
|
| 导出 | 用途 |
|
|
@@ -347,7 +351,7 @@ const {
|
|
|
347
351
|
| `getRuntimeDir()` | 包内 `runtime/` 绝对路径 |
|
|
348
352
|
| `getDefaultOfflineTemplatePath()` | 默认离线页模板路径 |
|
|
349
353
|
| `getDefaultOfflineBackgroundPath()` | 默认背景图路径 |
|
|
350
|
-
| `getDefaultCacheableApiPaths()` |
|
|
354
|
+
| `getDefaultCacheableApiPaths()` | 默认 API 白名单副本(空数组) |
|
|
351
355
|
| `getDefaultServiceWorker()` | `serviceWorker` 默认值 |
|
|
352
356
|
| `resolveServiceWorker(partial)` | 合并默认值 |
|
|
353
357
|
| `normalizeOfflineLogoPath(raw)` | Logo 路径规范化 |
|
|
@@ -391,7 +395,6 @@ vite-plugin-sw-offline/
|
|
|
391
395
|
|
|
392
396
|
```bash
|
|
393
397
|
npm login
|
|
394
|
-
cd packages/vite-plugin-sw-offline
|
|
395
398
|
npm pack --dry-run
|
|
396
399
|
```
|
|
397
400
|
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -54,18 +54,8 @@ function injectOfflineHtml(content, swConfig) {
|
|
|
54
54
|
return content;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
/** 未传入 cacheableApiPaths
|
|
58
|
-
const DEFAULT_CACHEABLE_API_PATHS = [
|
|
59
|
-
'/config/keFu.do',
|
|
60
|
-
'/config/queryConfig.do',
|
|
61
|
-
'/config/queryQuestion.do',
|
|
62
|
-
'/config/queryTradeZD.do',
|
|
63
|
-
'/news/getNewsList.do',
|
|
64
|
-
'/site/getBannerByPlat.do',
|
|
65
|
-
'/user/position/list.do',
|
|
66
|
-
'/stock/getStockSort.do',
|
|
67
|
-
'/user/getUserInfo.do'
|
|
68
|
-
];
|
|
57
|
+
/** 未传入 cacheableApiPaths 时使用的默认白名单(空列表,由业务显式配置) */
|
|
58
|
+
const DEFAULT_CACHEABLE_API_PATHS = [];
|
|
69
59
|
|
|
70
60
|
function resolveCacheableApiPaths(swConfig) {
|
|
71
61
|
const p = swConfig && swConfig.cacheableApiPaths;
|