将 node.js 应用打包为跨平台可执行文件,不适用于桌面应用

Package node.js app as cross-platform executable, not for desktop app

关于这个主题有很多问题,但它们似乎没有区分桌面应用程序或服务器端应用程序的可执行文件。我想我的第一个问题是:有什么区别?例如,Zeit/pkg 表示它们是 "node.js binary compiler",而 nwjs(以前的 node-webkit)表示它们是 "an app runtime based on Chromium and node.js".

我试过 zeit/pkg 并且效果很好,但我读到可以 performance issues 除非配置正确。我想确保我选择了正确的工具并遇到了 nwjs。它似乎做了很多与 pkg 相同的事情,但有更多的追随者、更多的文档和强大的 api。我可以像使用 pkg 一样将 nwjs 用作服务器端可执行文件(即不使用桌面功能)吗?

这个 answer 指出 nwjs "is an option, but it really isn't set-up to do a server - client type relationship",但随后评论说 "you can launch a server from node-webkit just in the way you launch it in Node.js. It's just that node-webkit provide another way beyond B/S architecture"。

那么,nwjs 实际上与 pkg 相同,还是根本不同?

我意识到还有 Electron,它声明 "build cross platform desktop apps" 并且看起来类似于 nwjs。我不是要参与 Electron 与 nwjs 的辩论,而是桌面与服务器,如果有区别的话。

您已经掌握了大部分内容,只需要说明几处。原因 nw.js / Electron 将自己声明为 desktop 应用程序是,它的核心架构设计旨在将 node.js 与 chromium 集成以 UI 启用创建应用程序确实有 UI。您仍然可以在不启动可见 ui 的情况下使用这些框架的一部分(node.js 方面),在这种情况下,它的行为类似于普通的 node.js。仍然有警告,就像在某些情况下它已经与内核中的铬紧密集成一样,您应该正确启动铬屏幕(或像 CI 那样创建虚拟缓冲区等)。

此外,当您关心性能时,我怀疑使用 UI 框架进行服务器端工作能否实现您想要的 - 虽然不会有很大的开销,但节点与 Chromium 之间的集成与裸 node.js 显而易见。

回到原来的问题,我觉得问题本身有些模糊。如果真正的目的是服务器端应用程序,您可能不需要 package 它,但正确部署节点及其依赖模块或将其打包为可安装的方式,而不是像 pkg 那样创建单个二进制文件。