我正在考虑开发一个由两部分组成的桌面应用程序:
2个部件通过插座连接。别问我为什么觉得奇怪我希望能够向客户提供一个安装程序的应用程序。我不希望用户必须自己安装Node.js。有没有一种方法可以将Node.js服务器安装为独立的,即无需在系统上全局安装Node.js。
此问题适用于任何(Windows、Linux、Mac OS X...)环境。
a2mppw5e1#
更新2017-05-04:城里来了个新孩子:
创建安装程序需要执行多个步骤,并且每个操作系统的步骤各不相同。例如:
.pkg
.deb
.exe
.msi
lndjwyie2#
您可以将二进制文件与应用程序捆绑在一起。无需安装任何东西即可运行Node应用。二进制文件为available,与安装程序位于同一页。你只需要知道二进制文件在哪里,但是我假设你已经有了一个安装程序,可以把它们放在已知的地方。
// To start the node process $ /path/to/binaries/npm install $ /path/to/binaries/node myApp.js
qltillow3#
Node-Webkit是一个选项,但它实际上并没有设置为实现“服务器-客户端”类型的关系。另一种选择是将node.js安装程序与应用程序安装程序打包在一起。然后,当应用程序 Boot 时,您可以启动一个node.js进程。我知道一些开发人员已经在用钛做这件事,这里有一点更多的信息information。希望这有帮助!
nhaq1z214#
这里有一个选项:Light Table是一个节点应用程序,但在大多数操作系统上安装得很好,并干净地集成了GUI(webkit)。为此,它利用了node-webkit。(直接从html页面运行节点代码。)下面是packaging documentation。
w8f9ii695#
值得一提的是GitHub制作的Electron。用于构建Atom、Slack、Visual Studio Code等。
wfveoks06#
我刚刚偶然发现了nexe-一个“从node.js应用程序中创建单个可执行文件”的工具。我还没有试过它,但我想即使没有安装程序也可以工作-只生成一个独立的二进制文件。
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.创建节点可执行文件的副本,并根据您的需要为其命名:
cp $(command -v node) hello
使用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):
codesign --remove-signature hello
signtool可以从已安装的Windows SDK中使用。如果跳过此步骤,则忽略postject中与签名相关的任何警告。
signtool remove /s hello.exe
1.通过运行带有以下选项的postject,将blob注入复制的二进制文件中:
hello
hello.exe
NODE_SEA_BLOB
sea-prep.blob
--sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
--macho-segment-name NODE_SEA
总而言之,以下是每个平台所需的命令:
npx postject hello NODE_SEA_BLOB sea-prep.blob \ --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
npx postject hello.exe NODE_SEA_BLOB sea-prep.blob ` --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
npx postject hello.exe NODE_SEA_BLOB sea-prep.blob ^ --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
npx postject hello NODE_SEA_BLOB sea-prep.blob \ --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 \ --macho-segment-name NODE_SEA
1.对二进制文件进行签名(仅限macOS和Windows):
codesign --sign - hello
需要有证书才能这样做。但是,无符号的二进制文件仍然是可运行的。
signtool sign /fd SHA256 hello.exe
1.运行二进制文件:
$ ./hello world Hello, world!
$ .\hello.exe world Hello, world!
7条答案
按热度按时间a2mppw5e1#
更新2017-05-04:城里来了个新孩子:
更新时间2016-11-14:如今,电子和nwjs似乎是最好的选择。
原件:
创建安装程序需要执行多个步骤,并且每个操作系统的步骤各不相同。例如:
.pkg
,这里有关于如何做到这一点的说明:https://coolaj86.com/articles/how-to-create-an-osx-pkg-installer.html.deb
,这里有关于如何做的说明:https://coolaj86.com/articles/how-to-create-a-debian-installer.html.exe
或.msi
,这里有关于如何使用innosetup安装程序的说明:https://coolaj86.com/articles/how-to-create-an-innosetup-installer.htmllndjwyie2#
您可以将二进制文件与应用程序捆绑在一起。无需安装任何东西即可运行Node应用。二进制文件为available,与安装程序位于同一页。
你只需要知道二进制文件在哪里,但是我假设你已经有了一个安装程序,可以把它们放在已知的地方。
qltillow3#
Node-Webkit是一个选项,但它实际上并没有设置为实现“服务器-客户端”类型的关系。
另一种选择是将node.js安装程序与应用程序安装程序打包在一起。然后,当应用程序 Boot 时,您可以启动一个node.js进程。我知道一些开发人员已经在用钛做这件事,这里有一点更多的信息information。
希望这有帮助!
nhaq1z214#
这里有一个选项:Light Table是一个节点应用程序,但在大多数操作系统上安装得很好,并干净地集成了GUI(webkit)。
为此,它利用了node-webkit。(直接从html页面运行节点代码。)下面是packaging documentation。
w8f9ii695#
值得一提的是GitHub制作的Electron。用于构建Atom、Slack、Visual Studio Code等。
wfveoks06#
我刚刚偶然发现了nexe-一个“从node.js应用程序中创建单个可执行文件”的工具。
我还没有试过它,但我想即使没有安装程序也可以工作-只生成一个独立的二进制文件。
w6lpcovy7#
从node.js 18.16.0开始,您现在可以生成single executable applications
用户可以使用节点二进制文件本身和任何可以将资源注入到二进制文件中的工具,从捆绑的脚本中创建单个可执行应用程序。
以下是使用postject工具创建单个可执行应用程序的步骤:
1.创建一个JavaScript文件:
1.创建一个配置文件,构建一个可以注入到单个可执行应用程序中的blob(有关详细信息,请参阅生成单个可执行准备blob):
1.生成要注入的blob:
1.创建节点可执行文件的副本,并根据您的需要为其命名:
使用PowerShell:
使用命令提示符:
. exe扩展名是必需的。
1.删除二进制文件的签名(仅限macOS和Windows):
signtool可以从已安装的Windows SDK中使用。如果跳过此步骤,则忽略postject中与签名相关的任何警告。
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内容的段的名称。总而言之,以下是每个平台所需的命令:
1.对二进制文件进行签名(仅限macOS和Windows):
需要有证书才能这样做。但是,无符号的二进制文件仍然是可运行的。
1.运行二进制文件: