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

Posted

技术标签:

【中文标题】如何测试电子生成器自动更新流程?【英文标题】:How can I test electron-builder auto-update flow? 【发布时间】:2018-12-02 21:06:22 【问题描述】:

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

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

在electron-builder docs 中有一个关于测试自动更新的简短提及:

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

但是,它相当模糊......

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

1.如何实际测试自动更新流程?

我是否需要实际发布新版本才能在本地触发更新?似乎很不清楚,这就像针对生产服务器进行开发一样。

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

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

【问题讨论】:

这方面有进展吗? 我确实设法做了一些事情,但这需要一篇经过精心编辑的文章来提供一个好的答案。自从我问这个问题以来,我一直在学习。现在,您可能想看看这个:github.com/electron-userland/electron-builder/issues/3053 当你弄明白的时候,你能回答你自己的问题吗? 【参考方案1】:

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

我创建了一个虚拟 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');
    

...这对你的情况应该足够了——因为你不需要下载。

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

您可以在 electron-builder 配置中更改 repo 设置以指向您的虚拟 repo,然后打包您的应用程序。这将为您提供一个打包的生产版本,指向您的虚拟存储库——这就是我进行下载测试的方式(尽管我有一个证书,并签署了我的应用程序) 您应该调用 autoUpdate 的 checkForUpdates(),但如果 checkForUpdatesAndNotify() 为您提供有用的操作系统通知,那么您应该能够将 autoUpdater.autoDownload 设置为 false 并最终得到您需要的信息。

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

【讨论】:

【参考方案2】:

我们使用electron-updater 和 GitHub 作为自动更新的提供者。不幸的是,它破坏了很多,electron-builder 团队不能很好地支持这些问题(1、2、3)(根据我自己的经验,但你可以在 GitHub 上找到更多示例)。

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

创建具有任意高版本号的应用构建 创建公共存储库并发布上述构建 在您的 main 入口点旁边创建一个 dev-app-update.yml 并为上面的存储库配置它 (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

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

这应该会给您一些确定性,但我们仍然在生产中遇到问题。如果您想确定,请使用测试存储库但打包生产应用程序来完成完整的更新流程,就像使用实时应用程序一样。

【讨论】:

以上是关于如何测试电子生成器自动更新流程?的主要内容,如果未能解决你的问题,请参考以下文章

如何每月使用导入数据自动更新 Google 电子表格?

如何从 Google 电子表格中的 Google Apps 脚本自动更新“站点地图”功能?

如何静默自动更新通过 NSIS 为所有用户/每台机器安装的电子应用程序?

App自动化测试怎么做?实战分享App自动化测试全流程

将亚马逊 s3 与电子制造商的自动更新程序一起使用 [关闭]

自动化测试流程构想