S3

如何将可分发的 Electron 应用工件发布到 Amazon S3

S3 目标将您的构建器工件发布到 Amazon S3 存储桶。

安装

npm install --save-dev @electron-forge/publisher-s3

用法

要使用 @electron-forge/publisher-s3,请将其添加到 publishers 数组中,位于您的 Forge 配置

forge.config.js
module.exports = {
  // ...
  publishers: [
    {
      name: '@electron-forge/publisher-s3',
      config: {
        bucket: 'my-bucket',
        public: true
      }
    }
  ]
};

配置选项在 PublisherS3Config 中有记录。

身份验证

建议您遵循 Amazon AWS 指南 并设置共享凭证指南或正确的环境变量。但是,如果这不可行,发布者配置允许设置 accessKeyIdsecretAccessKey 配置选项。

密钥管理

默认情况下,S3 发布者会将其对象上传到 {prefix}/{platform}/{arch}/{name} 密钥,其中

  • {prefix}config.folder 选项的值(默认为 package.json 中的 "name" 字段)。

  • {platform} 是您正在发布的工件的目标平台。

  • {arch} 是您正在发布的工件的目标架构。

  • {name} 是您正在发布的工件的文件名。

如果您对同一平台的同一版本多次运行发布命令(例如,同时发布 ia32x64 Windows 工件),您的上传可能会在 S3 存储桶中被覆盖。

为避免此问题,您可以使用 keyResolver 选项以编程方式生成 S3 密钥。

forge.config.js
{
  name: '@electron-forge/publisher-s3',
  config: {
    // ...
    keyResolver: (filename, platform, arch) => {
      return `some-prefix/${platform}/${arch}/${filename}`
    }
    // ...
  }
}

从 S3 自动更新

您可以将 Electron 的内置 autoUpdater 模块配置为使用 S3 发布者发布的工件。这是一个分两步的过程

首先,您必须将 @electron-forge/publisher-s3 配置为将您的文件发布到自动更新兼容的布局中,并使用 @electron-forge/maker-zip + @electron-forge/maker-squirrel 构建您的应用程序。

forge.config.js
module.exports = {
  // ...
  makers: [
    {
      name: '@electron-forge/maker-zip',
      config: (arch) => ({
        // Note that we must provide this S3 URL here
        // in order to support smooth version transitions
        // especially when using a CDN to front your updates
        macUpdateManifestBaseUrl: `https://my-bucket.s3.amazonaws.com/my-app-updates/darwin/${arch}`
      })
    },
    {
      name: '@electron-forge/maker-squirrel',
      config: (arch) => ({
        // Note that we must provide this S3 URL here
        // in order to generate delta updates
        remoteReleases: `https://my-bucket.s3.amazonaws.com/my-app-updates/win32/${arch}`
      })
    }
  ],
  publishers: [
    {
      name: '@electron-forge/publisher-s3',
      config: {
        bucket: 'my-bucket',
        public: true
      }
    }
  ]
};

正确配置 Forge 后,第二步是在应用程序的主进程中配置 autoUpdater 模块。最简单的形式如下所示,但您可能希望挂钩其他事件以向用户显示 UI 或询问他们是否现在要更新您的应用程序。

main.js
const { updateElectronApp, UpdateSourceType } = require('update-electron-app');

updateElectronApp({
  updateSource: {
    type: UpdateSourceType.StaticStorage,
    baseUrl: `https://my-bucket.s3.amazonaws.com/my-app-updates/${process.platform}/${process.arch}`
  }
});

上次更新于