自动更新
NW.js 倾向于支持社区提供的更新解决方案,而不是内置的解决方案。以下是值得查看的现有解决方案列表。
- node-webkit-updater (由 @edjafarov 提供)
- nwjs-autoupdater (由 @oaleynik 提供)
- nw-autoupdater (由 @dsheiko 提供)
node-webkit-updater
NPM 模块,它提供低级 API 来
- 检查清单以获取版本(来自运行的“旧”应用程序)。
- 如果版本与运行的版本不同,则将新包下载到临时目录。
- 在临时目录中解压缩包。
- 从临时目录运行新应用程序并终止旧应用程序(即,仍然全部来自运行的应用程序)。
- 新应用程序(在临时目录中)将自身复制到原始文件夹,覆盖旧应用程序。
- 新应用程序将从原始文件夹运行自身并退出进程。
不过,您应该自己构建此逻辑(基本示例)。
nwjs-autoupdater
这个微小的 golang 应用程序(构建后只有约 2MB),可以与 NW.js 应用程序捆绑在一起,然后用于解压缩更新。
要更新目标应用程序,更新程序需要知道两件事 - 新版本所在的 zip 存档位置以及应用程序的执行文件位置,以便在更新后重新启动应用程序。这些可以通过命令行参数 --bundle
和 --inst-dir
传递给更新程序,其中 --bundle
是包含新应用程序版本的 zip 存档的路径,--inst-dir
是应用程序执行文件的路径。
与 node-webkit-updater
相比,它有许多优点。
- 它可以更新更新程序本身。
- 不需要提升权限(除非应用程序本身已安装在需要提升权限的文件夹中)。
- 更新程序的可执行文件大小要小得多,因为它不需要将整个新的 NW.js 应用程序与主应用程序捆绑在一起。
检查更新的逻辑也需要您自己构建。该 示例 展示了如何将 javascript 模块用作 NW.js 应用程序的入口点并在后台检查更新。
nw-autoupdater
NPM 模块提供的 API 与 node-webkit-updater
的 API 类似,但经过扩展,适用于使用 Node 7.x 的 NW.js,并基于简洁的 async/await 语法。具体来说,它允许您
- 从远程发布服务器读取清单
- 检查远程清单中的版本是否大于本地清单中的版本
- 下载与主机平台匹配的最新可用版本(根据远程清单的 packages
映射)
- 订阅下载进度事件
- 在临时目录中解压缩它(zip 或 tar.gz)
- 订阅安装进度事件
- 关闭应用程序并从下载的版本(来自临时目录)启动它(作为分离进程)
- 备份实际版本并将其替换为新版本
- 从其原始位置重新启动更新后的应用程序
该包包含发布服务器和客户端的示例。