关于这个主题有很多问题,但它们似乎无法区分桌面应用程序或服务器端应用程序的可执行文件。我想我的第一个问题是:有什么区别?例如,Zeit/pkg 说它们是“node.js 二进制编译器”,而 nwjs(以前称为 node-webkit)说它们是“基于 Chromium 和 node.js 的应用程序运行时”。
我尝试了 zeit/pkg 并且效果很好,但读到可以有 performance issues除非配置正确。我想确保我选择了正确的工具并且遇到了 nwjs。它似乎做了很多与 pkg 相同的事情,但拥有更多的追随者,以及更多的文档和强大的 api。我可以像使用 pkg 一样将 nwjs 用作服务器端可执行文件(即不使用桌面功能)吗?
这个answer声明 nwjs“是一个选项,但它实际上并没有设置为执行服务器 - 客户端类型关系”,但随后有评论说“您可以从 node-webkit 启动服务器,就像您在其中启动它一样Node.js。只是 node-webkit 提供了另一种超越 B/S 架构的方式”。
那么,nwjs 与 pkg 实际上是相同的,还是根本不同?
我意识到还有 Electron,它声明“构建跨平台桌面应用程序”并且看起来类似于 nwjs。我不是想进入 Electron 与 nwjs 的辩论,而是桌面与服务器,如果有区别的话。
最佳答案
你已经得到了大部分的东西,只需要很少的澄清。原因 nw.js/Electron 将自己声明为桌面应用程序是,它的核心架构设计旨在将 node.js 与 chromium 集成以具有 UI,从而使创建的应用程序确实具有 UI。您仍然可以在不启动可见 ui 的情况下使用这些框架的一部分(node.js 端),在这种情况下,它的行为类似于普通的 node.js。仍然有一些警告,就像它已经与核心中的 Chrome 紧密集成,在某些情况下,您应该让屏幕正确启动 Chrome (或像许多 CI 那样创建虚拟缓冲区,等等)。
此外,当您关心性能时,我怀疑使用 UI 框架进行服务器端工作能否实现您的期望 - 虽然不会很大,但与裸 node.js 相比,node 与 chromium 之间的集成会产生开销。
回到最初的问题,我觉得问题本身有些模糊。如果意图是真正的服务器端应用程序,您可能不需要 package
它但是正确地部署 Node 及其依赖模块或以可安装方式打包它,而不是像 pkg 那样创建单个二进制文件。
关于node.js - 将 node.js 应用程序打包为跨平台可执行文件,不适用于桌面应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48933927/