独立Node.js应用程序

ikfrs5lh  于 2023-06-22  发布在  Node.js
关注(0)|答案(7)|浏览(159)

我正在考虑开发一个由两部分组成的桌面应用程序:

  • 用户界面(例如Java应用程序)
  • 后端Node.js服务器

2个部件通过插座连接。别问我为什么觉得奇怪
我希望能够向客户提供一个安装程序的应用程序。我不希望用户必须自己安装Node.js。
有没有一种方法可以将Node.js服务器安装为独立的,即无需在系统上全局安装Node.js。

此问题适用于任何(Windows、Linux、Mac OS X...)环境。

a2mppw5e

a2mppw5e1#

更新2017-05-04:城里来了个新孩子:

创建安装程序需要执行多个步骤,并且每个操作系统的步骤各不相同。例如:

lndjwyie

lndjwyie2#

您可以将二进制文件与应用程序捆绑在一起。无需安装任何东西即可运行Node应用。二进制文件为available,与安装程序位于同一页。
你只需要知道二进制文件在哪里,但是我假设你已经有了一个安装程序,可以把它们放在已知的地方。

// To start the node process
$ /path/to/binaries/npm install
$ /path/to/binaries/node myApp.js
qltillow

qltillow3#

Node-Webkit是一个选项,但它实际上并没有设置为实现“服务器-客户端”类型的关系。
另一种选择是将node.js安装程序与应用程序安装程序打包在一起。然后,当应用程序 Boot 时,您可以启动一个node.js进程。我知道一些开发人员已经在用钛做这件事,这里有一点更多的信息information
希望这有帮助!

nhaq1z21

nhaq1z214#

这里有一个选项:Light Table是一个节点应用程序,但在大多数操作系统上安装得很好,并干净地集成了GUI(webkit)。
为此,它利用了node-webkit。(直接从html页面运行节点代码。)下面是packaging documentation

w8f9ii69

w8f9ii695#

值得一提的是GitHub制作的Electron。用于构建Atom、Slack、Visual Studio Code等。

wfveoks0

wfveoks06#

我刚刚偶然发现了nexe-一个“从node.js应用程序中创建单个可执行文件”的工具。
我还没有试过它,但我想即使没有安装程序也可以工作-只生成一个独立的二进制文件。

w6lpcovy

w6lpcovy7#

从node.js 18.16.0开始,您现在可以生成single executable applications
用户可以使用节点二进制文件本身和任何可以将资源注入到二进制文件中的工具,从捆绑的脚本中创建单个可执行应用程序。
以下是使用postject工具创建单个可执行应用程序的步骤:
1.创建一个JavaScript文件:

echo 'console.log(`Hello, ${process.argv[2]}!`);' > hello.js

1.创建一个配置文件,构建一个可以注入到单个可执行应用程序中的blob(有关详细信息,请参阅生成单个可执行准备blob):

echo '{ "main": "hello.js", "output": "sea-prep.blob" }' > sea-config.json

1.生成要注入的blob:

node --experimental-sea-config sea-config.json

1.创建节点可执行文件的副本,并根据您的需要为其命名:

  • 在Windows以外的系统上:
cp $(command -v node) hello
  • 在Windows上:

使用PowerShell:

cp (Get-Command node).Source hello.exe

使用命令提示符:

for /F "tokens=*" %n IN ('where.exe node') DO @(copy "%n" hello.exe)

. exe扩展名是必需的。
1.删除二进制文件的签名(仅限macOS和Windows):

  • 在macOS上:
codesign --remove-signature hello
  • 在Windows上(可选):

signtool可以从已安装的Windows SDK中使用。如果跳过此步骤,则忽略postject中与签名相关的任何警告。

signtool remove /s hello.exe

1.通过运行带有以下选项的postject,将blob注入复制的二进制文件中:

  • hello/hello.exe-在步骤4中创建的节点可执行文件副本的名称。
  • NODE_SEA_BLOB-二进制文件中将存储blob内容的资源/注解/节的名称。
  • sea-prep.blob-步骤1中创建的blob的名称。
  • --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2-Node.js项目用来检测文件是否被注入的fuse。
  • --macho-segment-name NODE_SEA(仅在macOS上需要)-二进制文件中存储blob内容的段的名称。

总而言之,以下是每个平台所需的命令:

  • 在Linux上:
npx postject hello NODE_SEA_BLOB sea-prep.blob \
    --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
  • 在Windows-PowerShell上:
npx postject hello.exe NODE_SEA_BLOB sea-prep.blob `
    --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
  • 在Windows上-命令提示符:
npx postject hello.exe NODE_SEA_BLOB sea-prep.blob ^
    --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
  • 在macOS上:
npx postject hello NODE_SEA_BLOB sea-prep.blob \
    --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 \
    --macho-segment-name NODE_SEA

1.对二进制文件进行签名(仅限macOS和Windows):

  • 在macOS上:
codesign --sign - hello
  • 在Windows上(可选):

需要有证书才能这样做。但是,无符号的二进制文件仍然是可运行的。

signtool sign /fd SHA256 hello.exe

1.运行二进制文件:

  • 在Windows以外的系统上
$ ./hello world
Hello, world!
  • 在Windows上
$ .\hello.exe world
Hello, world!

相关问题