2

我可以将电子应用程序发布到 AWS S3 存储桶。但是如何使用电子自动更新器从电子应用程序发布的 S3 存储桶中获取更新?

4

2 回答 2

2

对于使用 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 被缓存,那么应用程序在获得新版本之前不会更新。

于 2021-04-08T10:03:05.933 回答
1

默认情况下,所有文件都位于以下键处:

${config.文件夹 || appVersion}/${artifactName}

配置选项记录在PublisherS3Config

{
  name: '@electron-forge/publisher-s3',
  config: {
    bucket: 'my-bucket',
    public: true
  }
}
于 2020-05-18T17:29:52.233 回答