如何测试电子生成器的自动更新流程?

时间:2018-06-23 18:29:01

标签: testing electron auto-update electron-builder

我构建了一个Electron应用程序,现在正在研究如何分发它。 我和electron-builder一起去包装等。

在某种程度上,作为一名Web开发人员,我习惯于在Web服务器上连续部署Web应用程序,但是我很难弄清楚如何在Electron中分发打包的应用程序。

electron-builder docs中,有关于测试自动更新的简短说明:

  

“请注意,为了开发/测试更新的UI / UX而不打包应用程序,您需要在项目的根目录中有一个名为dev-app-update.yml的文件,该文件与您从electronic-构建器配置(但采用YAML格式)”

但是,这很模糊...

所以我实际上有两个问题:

1。我实际上如何测试自动更新流程?

我是否需要实际发布新版本以在本地触发更新?似乎还不清楚,就像在生产服务器上开发一样。

2。可以对未签名的代码进行后备吗?

我还没有任何代码签名证书。因此,操作系统/应用程序将阻止自动更新。但是,我仍然想告诉用户有可用的更新,以便他们可以手动下载该应用程序。我可以这样做吗? (回到第一点,我希望能够测试此流程)

2 个答案:

答案 0 :(得分:0)

我刚刚处理完了。我还想针对非生产服务器进行测试,避免每次迭代时都打包应用程序。要测试下载,我必须对我的应用进行签名,这会减慢速度。但是听起来您只需要检查更新即可。我认为您可以执行以下操作...

我创建了一个虚拟github存储库,然后创建了一个文件dev-app-update.yml,其中包含:

owner: <user or organization name>
repo: dev-auto-update-testing
provider: github

此文件的默认路径是默认位置,您无法访问该位置。幸运的是,您可以像这样覆盖它:

    if (isDev) {
      // Useful for some dev/debugging tasks, but download can
      // not be validated becuase dev app is not signed
      autoUpdater.updateConfigPath = path.join(__dirname, 'dev-app-update.yml');
    }

...这足以满足您的情况-因为您不需要下载。

如果没有,这里还有其他提示:

  • 您可以在电子生成器配置中更改回购设置,以指向您的虚拟回购,然后打包您的应用。这将为您提供一个打包的生产版本,该版本指向您的虚拟仓库-这就是我进行下载测试的方式(尽管我有证书,并为我的应用程序签名了)
  • 您应该调用autoUpdate的checkForUpdates(),但是如果checkForUpdatesAndNotify()为您提供了有用的OS通知,那么您应该能够将autoUpdater.autoDownload设置为false并得到所需的内容。 / li>

最后,听起来您可以跳过autoUpdater,因为无论如何您都不会使用下载功能。相反,您可以使用github's releases api,假设您使用github来托管发布。如果没有,那么您的主机应该有类似的东西。使用它来检查更新,然后从您的应用程序内告诉用户(也可以向他们显示可点击的网址)。如果您想要操作系统通知electron has a module for that

答案 1 :(得分:0)

我们将electron-updater与GitHub一起用作自动更新的提供者。不幸的是,它破裂了很多,electron-builder团队对这些问题(123)的支持不佳(根据我的经验,但您可以找到GitHub上的更多示例)。

在开发人员模式下测试更新的一种方法:

  • 使用任意较高的版本号创建应用的构建版本
  • 创建一个公共仓库并发布上述版本
  • 在您的dev-app-update.yml入口点旁边创建一个main,并为上面的仓库(see)配置它
  • 在您的主要入口点:
import { autoUpdater } from "electron-updater";

...

if (process.env.NODE_ENV === "development") {
  // Customize the test by toggling these lines
  // autoUpdater.autoDownload = false
  // autoUpdater.autoInstallOnAppQuit = false;

  autoUpdater.checkForUpdates();
}

然后,在运行yarn dev时,您应该看到类似以下内容的内容:

Checking for update
...
Found version 100.0.0 (url: <>.exe)
Downloading update from <>.exe
updaterCacheDirName is not specified in app-update.yml Was app build using at least electron-builder 20.34.0?
updater cache dir: C:\Users\<>\AppData\Local\Electron
New version 100.0.0 has been downloaded to C:\Users\<>\AppData\Local\Electron\pending\<>.exe

它应该在您关闭开发应用程序时安装。

这应该给您确定性,但是我们在生产中仍然遇到问题。如果您想确定的话,请像测试实时应用程序一样,通过测试存储库打包整个生产流程,并打包生产应用程序。