说到 node.js 的 GUI 开发方案,首先想到的就是 electronnw.js。但除了它们之外,是否存在其它更轻量级的技术方案可供选择呢?

node-gui

这两天,翻出了几年前在校时用 winform 写的小工具,发现虽然能使用,部分功能却是已经需要改进了。

工具的源码已经丢失,现在用的电脑里也没有再安装 winform 相关的开发环境。于是决定使用 node.js 重写工具。

估算一下,重写的核心代码大概也就一、两KB,毕竟只是每次打开后只用几分钟的小工具,用来爬一爬网站内容之类的需求,业务逻辑挺简单的。

在这个基础上,再加上个方便操作的 GUI 就好了,于是首先想到的方案自然就是 electron 或者 nw.js

electron

但打包了 Chromium 内核和 node.js 环境后,如今的 electronnw.js 动不动就上百MB的大小,用来开发这样的小工具实在是不划算。

而且在自己另一台破电脑上,electron 启动时间动不动就是十几秒,操作响应也不是很灵敏,达不到小而快的目标效果。

除了它们之外,是否还有其它的 node.js GUI 开发方案呢?

于是找了找其它 node.js 的 GUI 框架,大家有兴趣的话可以关注一下:

positron

positron 兼容于 electron,只是 Web 内核方面,把 Chromium 换成了 Gecko

目前此项目已停止开发。

项目地址:https://github.com/mozilla/positron

libui-node

libui-node

libui-node 提供了简单便携的基于 C 的 GUI 库,目标是成为相对于 electron 之外跨平台 GUI 开发的轻量级选择。

跑了一下 DEMO,组件反馈虽然略有迟缓,但可用组件看起来还挺丰富的。

不过目前整个项目大小有上百MB,暂时似乎没有完善的部署发布方案,希望之后会日渐完善吧。

项目地址:https://github.com/parro-it/libui-node

react-x11

react-x11

react-x11 刚刚起步,目前可用组件只有 window,且需要运行在 X Window 环境下(通常是 linux 桌面环境,或者 osx + XQuattz)。

项目地址:https://github.com/sidorares/react-x11

node-qt

node-qt

node-qtnode.js 附件的形式提供了 Qt 库的原生绑定。

但在我的 Windows 环境下似乎水土不服,安装失败(貌似是需要 MSVC++ 而不是 VS2013 的缘故)。

项目地址:https://github.com/yue/node-gui

reactXP

reactXP 是由微软 skype 团队近期推出的跨平台开发框架(XP = Cross Platform)。支持安卓、iOS、桌面等多平台。

看起来具体实现基本就是把 react-nativeelectron 等方案整个打包,再增加了对 Win10 的 UWP 支持,是个大而全而非小而轻的方案?

项目地址:https://github.com/Microsoft/reactxp


还有一些不成熟或是有问题的方案,在这就没有列举出来了。

其他语言方面,尝试了 pythonTkinter。发现挺方便的,安装完 Python 就能使用,但能实现的效果似乎很有限;PyQt 更强大、美观,但需要花时间去学习 QT,没法现在就立刻动手做。

而且两者都不如类 Web 的 GUI 方案来的灵活便捷(React 也算此类)。

这么说来,近几年桌面开发似乎越来越不温不火,大家的关注中心似乎都转移到了移动端上。

而移动端的话,原生开发方面,从传统原生开发方式与 react-native 的出现、苹果推出 Swift,到最近谷歌钦定 Kotlin 作为安卓开发的一级语言;Web 前端开发方面,node.js 带来的 gruntgulpwebpack 工作流,以及各种优秀 MVVM 框架竞相出现,新技术不断出现,让前端开发成为了众所周知最爱造轮子的一拨人。

移动端涌现的各种新工具、框架、语言,对行业入门者来说有一定学习成本,但也确实带来了种种便利。它们一般都解决了各种以往开发方式中的痛点

对于日渐变化的移动端开发需求,确实提高了生产效率,改善开发体验。但新出现的方案毕竟需要在实践中逐步完善,所以它们每天都在不断迭代更新,甚至又出现更新的其它方案。

或许可以这么说,我们现在正经历着桌面端开发向移动端转移中心的过渡期。桌面端 GUI 开发的需求存在感日渐稀薄,现有传统开发方案已能应对日常需求,所以虽然也有一些技术痛点,却并没有更新开发方式的必要。

后记

这次的小工具的开发,最后采用的形式是编写好关键的 JS 脚本,加入 Greasemonkey 后直接在浏览器内执行,抓取需要的内容。

除此之外,做成 Chrome 插件,或者直接写成命令行工具,也是可选的轻量级方案。