hexo-swpp 3.2.3 → 3.3.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.
Files changed (3) hide show
  1. package/README.md +14 -0
  2. package/dist/index.js +16 -12
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -17,6 +17,7 @@ npm install hexo-swpp swpp-backends
17
17
  | ~3.0 | ^1.0.0 |
18
18
  | ~3.1 | ^1.1.0 |
19
19
  | ~3.2 | ^2.0.0 |
20
+ | ~3.3 | ^2.1.2 |
20
21
 
21
22
  ## 使用
22
23
 
@@ -28,6 +29,11 @@ swpp:
28
29
  enable: true
29
30
  # 是否在发布前自动执行脚本
30
31
  # auto_exec: true
32
+ # 构建时拉取版本文件的警告等级,缺省为 1
33
+ # 0 - 表示不允许出现 404 情况;1 - 表示允许服务器返回 404 状态码;2 - 表示允许任何 404(包括 DNS 解析失败等)
34
+ # warn_level: 1
35
+ # 检查版本的 URL,不能以 '/' 结尾
36
+ # npm_url: 'https://registry.npmmirror.com'
31
37
  ```
32
38
 
33
39
  插件会在生成网站时自动生成 Service Worker、注册代码、DOM 端支持代码(如果功能开启了的话),版本更新文件需要通过 `hexo swpp` 命令手动生成。
@@ -36,8 +42,10 @@ swpp:
36
42
 
37
43
  ⚠ 注意:
38
44
 
45
+ + 如果你的网站启用 `swpp` 后还没有发布过,请勿将 `warn_level` 设置为 0,这会导致构建失败。
39
46
  + 尽可能在压缩网站内容前执行 `hexo swpp`,因为部分压缩插件可能会出现同样的内容连续压缩结果不一样的问题,这会导致插件错误地更新缓存。
40
47
  + 如果你的网站发布过程不使用 `hexo deploy` 指令,则不要启用 `auto_exec` 选项。
48
+ + 将 `npm_url` 调整为非官方 URL 后检查版本时可能会出现 404 错误。
41
49
 
42
50
  插件的具体配置见 [Swpp Backends 官方文档 | 山岳库博](https://kmar.top/posts/b70ec88f/)。
43
51
 
@@ -70,6 +78,12 @@ module.exports.config = {
70
78
  3. 支持发布前自动执行 swpp \[3.2.1]
71
79
  4. 修复构建时报错的**严重漏洞** \[3.2.2]
72
80
  5. 插入的 DOM JS 加载方式改为 async \[3.2.2]
81
+ 6. 修复运行 `hexo s` 时报错的问题 \[3.2.3]
82
+ 7. 支持版本检查 \[3.2.3]
83
+ 8. 版本检查移动到 `generateBefore` 事件中 \[3.2.4]
84
+ 9. 支持调整文件拉取的判断等级 \[3.3.0]
85
+ 10. 版本检查改为仅在执行 `hexo server` 时执行 \[3.3.0]
86
+ 11. 支持自定义版本更新检查的 URL \[3.3.0]
73
87
  + 3.1+
74
88
 
75
89
  1. 支持 `swpp-backends@1.1` \[3.1.0]
package/dist/index.js CHANGED
@@ -35,9 +35,10 @@ const logger = require('hexo-log').default();
35
35
  function start(hexo) {
36
36
  const config = hexo.config;
37
37
  const pluginConfig = config['swpp'] ?? config.theme_config['swpp'];
38
- if (!pluginConfig.enable)
38
+ if (!pluginConfig?.enable)
39
39
  return;
40
- checkVersion();
40
+ if (process.argv.find(it => 'server'.startsWith(it)))
41
+ checkVersion(pluginConfig);
41
42
  let init = false;
42
43
  hexo.on('generateBefore', () => {
43
44
  if (init)
@@ -49,16 +50,16 @@ function start(hexo) {
49
50
  });
50
51
  if (pluginConfig['auto_exec']) {
51
52
  hexo.on('deployBefore', async () => {
52
- await runSwpp(hexo);
53
+ await runSwpp(hexo, pluginConfig);
53
54
  });
54
55
  }
55
56
  else {
56
57
  hexo.extend.console.register('swpp', '生成前端更新需要的 json 文件及后端使用的版本文件', {}, async () => {
57
- await runSwpp(hexo);
58
+ await runSwpp(hexo, pluginConfig);
58
59
  });
59
60
  }
60
61
  }
61
- async function runSwpp(hexo) {
62
+ async function runSwpp(hexo, pluginConfig) {
62
63
  const config = hexo.config;
63
64
  if (!fs.existsSync(config.public_dir))
64
65
  return logger.warn(`[SWPP] 未检测到发布目录,跳过指令执行`);
@@ -67,20 +68,23 @@ async function runSwpp(hexo) {
67
68
  return logger.error(`[SWPP] JSON 生成功能未开启,跳过指令执行`);
68
69
  const url = config.url;
69
70
  await Promise.all([
70
- swpp_backends_1.default.loader.loadUpdateJson(url + '/update.json'),
71
- swpp_backends_1.default.loader.loadVersionJson(url + '/cacheList.json')
71
+ swpp_backends_1.default.loader.loadUpdateJson(url + '/update.json', pluginConfig['warn_level'] ?? 1),
72
+ swpp_backends_1.default.loader.loadVersionJson(url + '/cacheList.json', pluginConfig['warn_level'] ?? 1)
72
73
  ]);
73
74
  await buildVersionJson(hexo);
74
75
  const dif = swpp_backends_1.default.builder.analyzeVersion();
75
76
  await buildUpdateJson(hexo, dif);
76
77
  }
77
- function checkVersion() {
78
- (0, node_fetch_1.default)(`https://registry.npmjs.org/swpp-backends/${swpp_backends_1.default.version}`)
78
+ function checkVersion(pluginConfig) {
79
+ const root = pluginConfig['npm_url'] ?? 'https://registry.npmjs.org';
80
+ (0, node_fetch_1.default)(`${root}/swpp-backends/${swpp_backends_1.default.version}`)
79
81
  .then(response => {
80
82
  if (![200, 301, 302, 307, 308].includes(response.status))
81
83
  return Promise.reject(response.status);
82
84
  return response.json();
83
85
  }).then(json => {
86
+ if ('error' in json)
87
+ return Promise.reject(json.error);
84
88
  if ('deprecated' in json) {
85
89
  logger.error(`[SWPP VersionChecker] 您使用的 swpp-backends@${swpp_backends_1.default.version} 已被弃用,请更新版本!`);
86
90
  logger.error(`\t补充信息:${json['deprecated']}`);
@@ -89,9 +93,9 @@ function checkVersion() {
89
93
  logger.info('[SWPP VersionChecker] 版本检查通过,注意定期检查版本更新。');
90
94
  }
91
95
  }).catch(err => {
92
- const isNumber = typeof err === 'number';
93
- logger.warn(`[SWPP VersionChecker] 版本检查失败${isNumber ? ('(' + err + ')') : ''}`);
94
- if (!isNumber)
96
+ const isSimple = ['number', 'string'].includes(typeof err);
97
+ logger.warn(`[SWPP VersionChecker] 版本检查失败${isSimple ? ('(' + err + ')') : ''}`);
98
+ if (!isSimple)
95
99
  logger.warn(err);
96
100
  });
97
101
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hexo-swpp",
3
- "version": "3.2.3",
3
+ "version": "3.3.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "types/index.d.ts",
6
6
  "files": [
@@ -32,7 +32,7 @@
32
32
  "node-fetch": "^2.6.12"
33
33
  },
34
34
  "peerDependencies": {
35
- "swpp-backends": "^2.0.0"
35
+ "swpp-backends": "^2.1.2"
36
36
  },
37
37
  "scripts": {}
38
38
  }