对于使用 Squirrel(即使用 electron-forge)的人,有一些关键设置可以实现无服务器。示例是 DO 空间,但同样适用于任何 s3 兼容的存储桶存储。
锻造配置如下:
...
makers: [
{
name: '@electron-forge/maker-squirrel',
config: {
setupExe: 'Setup.exe', // Fixed path for latest setup exe
remoteReleases: 'https://<bucket>.<region>.digitaloceanspaces.com/<folder>'
},
}
],
make_targets: {
win32: ['squirrel'],
},
publishers: [
{
name: '@electron-forge/publisher-s3',
config: {
bucket: '<bucket>',
endpoint: 'https://<region>.digitaloceanspaces.com',
folder: '<folder>', // IMPORTANT: always use the same folder
region: '<region>',
public: true // Necessary for serverless
}
}
],
...
然后我们只需将自动更新器指向存储桶:
autoUpdater.setFeedURL('https://<bucket>.<region>.digitaloceanspaces.com/<folder>')
之所以可行,是因为 Squirrel 本身甚至可以与静态文件系统或服务器一起工作,所有逻辑都被嵌入到 Update.exe 本身中。它只是查看提要 url 中的 RELEASES 文件,并确定是否需要使用列出的 nuget 包进行更新。
本质上,可变文件夹 URL 是阻止它与 autoUpdater.setFeedUrl() 开箱即用的原因,您希望所有文件(每个版本的 setup.exe、RELEASES 和 nuget)都在同一个文件夹中相同的平台/架构。
注意:如果您使用 CDN,请小心!如果 RELEASES 被缓存,那么应用在获得新版本之前不会更新。