自动更新

NWJS更支持社区内的更新解决方案,而非内置方案.以下是现有的相关方案:

node-webkit-updater

NPM模块为您提供了一些底层API:

  • 检查当前程序版本.
  • 如果存在新版本,则将新安装包下载并解压至temp临时目录.
  • 杀死旧版进程并运行新版本程序,新版本文件将覆盖旧版本目录.
  • 退出上述进程并启动新应用.

您可以参考这个根据上述逻辑的( 构建范例).

nwjs-autoupdater

这是个可内置于NWJS应用进行解压缩更新的仅有2M左右的golang小程序.

要更新目标应用,您需要将 --bundle--inst-dir命令行参数传递给更新程序,改程序将在更新后重启应用.

  • --bundle 内含新版本应用的zip的路径
  • --inst-dir 是应用可执行文件的路径

node-webkit-updater相比有多个优点:

  • 它可以对nwjs-autoupdater自身进行更新
  • 无需提升权限 (除非应用本身安装在需要提权的目录中).
  • 体量很小,所以无需在新版本中再次内置.

您可以参考这个根据上述逻辑的( 构建范例,该范例展示了如何将js模块作为NWJS应用入口点并在后买静默检查更新.

nw-autoupdater

NPM模块提供了类似 node-webkit-updater的API,但其扩展更适合Node 7.x的nw.js,其async/await语法更加干净,该软件包内含了发布服务器和客户端的示例:

  • 从远程服务器读取版本清单
  • 检查清单中的版本是否大于当前版本
  • 按系统平台下载匹配的最新版本 (根据远程清单中的 packages映射)
    • 订阅下载进度事件 -将其解压缩到临时目录(zip 或 tar.gz)
    • 订阅安装进度事件
  • 关闭应用程序并将其作为分离的进程,并启动临时目录里下载的新版本
  • 备份当前版本并替换为新版本
  • 从应用原始目录重启已更新的应用程序