[展示介绍] Neutralinojs: 小众的HTA继承者


Neutralinojs

如果你觉得微软的HTA非常小巧、简单、便捷是一个有一定价值的技术,又为它的古老的IE内核、不跨平台、闭源等问题发愁,那Neutralinojs绝对是一个好方案。它支持64位Windows,Linux,macOS,并且直接调用系统Webview,在Windows上是Edge Webview2,几乎完全支持HTML5。同时又像HTA那样可以在JS代码中直接访问系统资源,堪称HTA设计思想的完美继承者。

很多人将Neutralinojs和Electron对比,但两者解决的不是一类问题。Neutralinojs的目标是用Web技术开发小型应用,比如只有几MB的小工具。在这个领域上,Neutralinojs非常值得一试。

Neutralinojs的结构

根据官网教程很容易将Neutralinojs想象成一个复杂的JS工具。但事实上它的设计十分简单,和HTA相似。

一个Neutralinojs程序包含两部分

  • Neutralinojs可执行文件
  • HTML,CSS,JS文件包

Neutralinojs可执行文件是Neutralinojs预编译的,完全不需要修改它,就和HTA宿主程序一样,我们只要编写HTML,CSS,JS文件即可


(图源: https://neutralino.js.org/docs/contributing/architecture)

Neutralinojs也支持用别的语言拓展后端,既可以用传统的HTTP Request,也可以用内置的Web Socket拓展,但是这是个一般不用不能没有的功能: 轻量级的软件如果加上一个Java写的服务器就会变得臃肿,用C++就难以跨平台,只有lua这种非常轻量的解释型语言适合做Neutralinojs的后端。

寻找合适的后端语言

Neutralinojs没有指定的后端语言,你可以用任何语言写一个Web后端。但是要充分发挥Neutralinojs"小巧"的优势,必然要选一个同样小巧的后端。具体来说,要做到:

  • 体积小,后端最好应当小于5MB
  • 具有易用的轻量级Web框架
  • 具有不依赖系统的、丰富的标准库和第三方库

可选的几个方案:

方案 优点 缺点
Lua/MoonScript 体积非常小,只需700KB 第三方库不算多(有lapis这样的网络框架)
Python 有成熟的Web框架(flask)和丰富的第三方库 体积稍大,需8MB+
GraalVM 成熟的Java标准库,不错的性能 GraalVM编译出的镜像文件不一定小,而且很多库无法用GraalVM
Go,Dart 体积小、库多 语法乐色