1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
const fetch = require('../../lib/node-fetch');
const PackageUtil = require('./package-util');
const { compareVersion } = require('./version-util');
/** 本地版本 */
const LOCAL_VERSION = PackageUtil.version;
/** 远程仓库地址 */
const REMOTE_URL = PackageUtil.repository;
/**
* 更新器
* @author 陈皮皮 (ifaswind)
* @version 20210804
*/
const Updater = {
/**
* 远程仓库地址
* @type {string}
*/
get remote() {
return REMOTE_URL;
},
/**
* 分支
* @type {string}
*/
branch: 'master',
/**
* 获取远端的 package.json
* @returns {Promise<object>}
*/
async getRemotePackageJson() {
const packageJsonUrl = `${Updater.remote}/raw/${Updater.branch}/package.json`;
// 发起网络请求
const response = await fetch(packageJsonUrl, {
method: 'GET',
cache: 'no-cache',
mode: 'no-cors',
});
// 请求结果
if (response.status !== 200) {
return null;
}
// 读取 json
const json = response.json();
return json;
},
/**
* 获取远端版本号
* @returns {Promise<string>}
*/
async getRemoteVersion() {
const package = await Updater.getRemotePackageJson();
if (package && package.version) {
return package.version;
}
return null;
},
/**
* 获取本地版本号
* @returns {string}
*/
getLocalVersion() {
return LOCAL_VERSION;
},
/**
* 检查远端是否有新版本
* @returns {Promise<boolean>}
*/
async check() {
// 远端版本号
const remoteVersion = await Updater.getRemoteVersion();
if (!remoteVersion) {
return false;
}
// 本地版本号
const localVersion = Updater.getLocalVersion();
// 对比版本号
const result = compareVersion(localVersion, remoteVersion);
return (result < 0);
},
};
module.exports = Updater;