[英]How to make exe files from a node.js app?
我有一个我写的节点应用程序,我运行如下:
node.exe app.js inputArg
有什么方法可以让我将 package 单独放入 a.exe 中? 所以我可以做这样的事情吗?
App.exe inputArg
我有一些方法可以通过使用批处理文件来伪造它,所以我可以这样做:
App.bat inputArg
但这要求我拥有该文件夹中的所有依赖项和节点,这并不理想。
我使用的解决方案是 Roger Wang 的node-webkit 。
这是打包和分发 nodejs 应用程序的绝佳方式,它甚至让您可以选择将整个应用程序“捆绑”为单个可执行文件。 它支持windows、mac和linux。
以下是有关部署 node-webkit 应用程序的各种选项的一些文档,但简而言之,您可以执行以下操作:
就像附加说明一样 - 我已经使用它运送了几个生产盒/安装 cd 应用程序,并且它运行良好。 同一个应用程序可以在 windows、mac、linux 和网络上运行。
更新:项目名称已更改为“nw.js”并正确位于此处: nw.js
有一些替代方案,包括免费的和商业的。 我没有使用过它们中的任何一个,但理论上它们应该可以工作:
大多数将要求您将批处理文件保留为主可执行文件,然后捆绑 node.exe 和您的脚本。
根据您的脚本,您还可以选择将其移植到JSDB ,它支持通过简单地向其附加资源来创建可执行文件的简单方法。
第三个准解决方案是将 node 保留在C:\\utils
类的地方,并将此文件夹添加到您的PATH
环境变量中。 然后你可以在那个运行节点的目录中创建 .bat 文件+你喜欢的脚本——我让coffeescript的coffee
以这种方式在windows上工作。 可以使用批处理文件、vb 脚本或安装程序自动执行此设置。
对于任何遇到这个问题的人,现在有两个项目可以从您的节点项目中创建 exe, Pkg和Electron.atom.io ,它们略有不同:
我所知道的最好的工具是 NodeJS 工具: zeit/pkg
它非常易于使用(比 Nexe 多得多,仅作为示例),您可以全局npm install -g pkg
: npm install -g pkg
为 macOS、Linux 和 Windows 创建可执行文件:
pkg exampleApp.js
我有一些使用 NodeJS 套接字服务器的复杂代码,我尝试了不同的应用程序,除了zeit/pkg之外,没有一个正确地创建它。
默认情况下,Windows 将.js
文件与 Microsoft 的独立 JS 运行时引擎Windows Script Host相关联。 如果您在命令提示符下键入script.js (或在资源管理器中双击.js
文件),则该脚本由wscript.exe
执行。
这可能是通过全局设置解决本地问题,但您可以将.js
文件与node.exe
相关联,以便在命令提示符下键入script.js或双击/拖动项目到脚本上,将使用 Node 启动它们。
当然,如果——像我一样——你已经将.js
文件与一个编辑器相关联,以便双击它们打开你最喜欢的文本编辑器,这个建议不会有多大用处。 您还可以向.js
文件添加“使用节点执行” 的右键单击菜单项,尽管此替代方法不能解决您的命令行需求。
最简单的解决方案可能是只使用批处理文件——您不必在脚本所在的文件夹中拥有 Node 的副本。只需绝对引用 Node 可执行文件:
"C:\Program Files (x86)\nodejs\node.exe" app.js %*
另一种选择是这个非常简单的 C# 应用程序,它将使用自己的文件名 + .js
作为要运行的脚本启动 Node,并传递任何命令行参数。
class Program
{
static void Main(string[] args)
{
var info = System.Diagnostics.Process.GetCurrentProcess();
var proc = new System.Diagnostics.ProcessStartInfo(@"C:\Program Files (x86)\nodejs\node.exe", "\"" + info.ProcessName + ".js\" " + String.Join(" ", args));
proc.UseShellExecute = false;
System.Diagnostics.Process.Start(proc);
}
}
因此,如果您将生成的 EXE 命名为“app.exe”,则可以键入app arg1 ...
并且 Node 将使用命令行"app.js" arg1 ...
。 请注意,C# 引导程序应用程序将立即退出,让 Node 负责控制台窗口。
由于这可能是相对广泛的兴趣,我继续在 GitHub 上提供了它,包括编译的 exe,如果你喜欢和陌生人一起上货车的话。
没试过,但 nexe 看起来像 nexe 可以做到这一点:
既然已经回答了这个问题,又推出了另一种解决方案。
https://github.com/appjs/appjs
在撰写本文时,这是通过编译为可执行文件的精简铬包打包 node.js 应用程序的最终解决方案。
编辑:AppJS 不再处于活动状态,但它本身暗示了一个名为deskshell 的叉子。
这里有很多很好的答案,但它们并不像JXcore那样直接。
在 Windows 上安装 JXcore 后,您所要做的就是运行:
jx package app.js "myAppName" -native
这将生成一个 .exe 文件,您可以分发该文件并且可以在没有任何外部依赖的情况下执行该文件(您甚至不需要系统上的 JXcore 或 Node.js)。
这是有关该功能的文档: http : //jxcore.com/packaging-code-protection/#cat-74
编辑 2018
该项目现已死亡,但仍托管在此处: https : //github.com/jxcore/jxcore-release (感谢@Elmue)
尝试disclose
: https : //github.com/pmq20/disclose
disclose
本质上从您的 Node.js 项目和 Node.js 解释器中制作了一个自解压的 exe,具有以下特征,
尝试node-compiler
: https : //github.com/pmq20/node-compiler
我创建了一个名为node-compiler
的新项目来将您的 Node.js 项目编译成一个可执行文件。
比disclose
它更好,因为它从不第一次运行缓慢,因为您的源代码是与 Node.js 解释器一起编译的,就像标准的 Node.js 库一样。
此外,它在运行时将文件和目录请求透明地重定向到内存而不是文件系统。 这样就不需要源代码来运行编译后的产品。
工作原理: https : //speakerdeck.com/pmq20/node-dot-js-compiler-compiling-your-node-dot-js-application-into-a-single-executable
与同类项目相比,
pkg( https://github.com/zeit/pkg ):Pkg 动态地入侵了 fs.* API 以访问包内文件,而 Node.js Compiler 不理会它们,而是通过 libsquash 在更深层次上工作。 Pkg 使用 JSON 来存储包内文件,而 Node.js Compiler 使用更复杂和广泛使用的 SquashFS 作为其数据结构。
EncloseJS( http://enclosejs.com/ ):EncloseJS 将对包内文件的访问限制为仅五个 fs.* API,而 Node.js 编译器支持所有 fs.* API。 EncloseJS 是专有许可的,使用时收费,而 Node.js 编译器是 MIT 许可的,用户可以免费使用它,也可以免费修改它。
Nexe( https://github.com/nexe/nexe ):Nexe 不支持动态 require,因为它使用了 browserify,而 Node.js Compiler 支持包括 require.resolve 在内的所有类型的 require。
asar( https://github.com/electron/asar ):Asar 使用 JSON 来存储文件信息,而 Node.js Compiler 使用 SquashFS。 Asar 将代码存档和可执行文件分开,而 Node.js Compiler 将所有 JavaScript 源代码与 Node.js 虚拟机链接在一起,并生成单个可执行文件作为最终产品。
AppImage( http://appimage.org/ ):AppImage 仅支持内核支持 SquashFS 的 Linux,而 Node.js Compiler 支持 Linux、macOS 和 Windows 三个平台,同时对内核没有任何特殊功能要求。
我为此向您推荐 BoxedApp。 它是一种运行良好的商业产品。 它适用于任何 NodeJS 应用程序。 最终用户将只获得一个适用于您的应用程序的 EXE 文件。 无需安装。
例如,在 Electron 中,最终用户需要安装/解压缩您的应用程序,他将看到您代码的所有源文件。
BoxedApp 它打包了您的 NodeJS 应用程序所需的所有文件和依赖项。 它支持压缩,编译后的文件适用于 Windows XP+
使用的时候一定要在编译好的app中添加Node.EXE。 选择支持 Windows XP 的节点版本(如果需要)
程序支持命令行参数,所以打包后,你可以做
c:\myApp argument1
您可以在节点代码中获取参数:
process.argv[1]
有时你的应用程序有文件依赖,所以在 BoxedApp 中你可以添加任何文件夹和文件作为依赖,例如,你可以插入一个设置文件。
var mySettings=require('fs').readFileSync('./settings.jgon').toString()
更多信息:
请注意:通常我会推荐开源/免费软件,但在这种情况下,我没有找到任何可以完成工作的东西。
尝试使用 nexe 从您的 node.js 应用程序中创建一个可执行文件
我确实发现这些解决方案中的任何一个都满足了我的要求,因此制作了我自己的名为 node2exe 的节点版本来执行此操作。 它可以从https://github.com/areve/node2exe 获得
我已经探索这个话题好几天了,这是我发现的。 选项分为两类:
如果您想构建桌面应用程序,最好的选择是:
1- NW.js :让您直接从 DOM 调用所有 Node.js 模块,并启用一种使用所有 Web 技术编写应用程序的新方法。
2- Electron :使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用程序
这是它们之间的一个很好的比较: NW.js 和 Electron 比较。 我认为 NW.js 更好,它还提供了一个编译 JS 文件的应用程序。 还有一些独立的可执行文件和安装程序构建器,例如Enigma Virtual Box 。 它们都包含一个嵌入式版本的 Chrome,这对于服务器应用程序来说是不必要的。
如果你想打包一个服务器应用程序,这些是最好的选择:
node-compiler :为 Node.js 设计的 Ahead-of-time (AOT) 编译器,它可以正常工作。
Nexe :从您的 node.js 应用程序中创建一个可执行文件
在这个类别中,我认为 node-compiler 更好,它支持动态 require 和 native node 模块。 它非常易于使用,输出大小为 25MB。 您可以在 Node Compiler 页面中阅读与其他解决方案的完整比较。 我对 Nexe 的了解不多,但就目前而言,Node Compiler 似乎没有使用 V8 快照功能将 js 文件编译为二进制格式,但它计划用于版本 2。它还将具有内置的安装程序构建器。
厌倦了从命令提示符开始赢,然后我也遇到了这个问题。 稍微改进了ver. 在什么josh3736 。 这使用一个 XML 文件来获取一些设置。 例如, Node.exe
的路径以及要在默认 app.js 中启动的文件。 还有你在 app.js(或 server.js 或任何你称之为的)中指定的加载环境(生产、开发等)。 本质上,它添加了NODE_ENV={0}
,其中 {0} 是 app.js 中的配置名称,作为您的 var。 您可以通过修改 config.xml 中的“mode”元素来完成此操作。 你可以在这里获取项目 ==> github 。 请注意,在 Post Build 事件中,您可以修改复制路径以自动复制您的 config.xml 和可执行文件到您的Nodejs
目录,只是为了节省一个步骤。 否则将这些编辑掉,否则您的构建将发出警告。
var startInfo = new ProcessStartInfo();
startInfo.FileName = nodepath;
startInfo.Arguments = apppath;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = false;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
if(env.Length > 0)
startInfo.EnvironmentVariables.Add("NODE_ENV", env);
try
{
using (Process p = Process.Start(startInfo))
{
p.WaitForExit();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "Start Error", MessageBoxButtons.OK);
}
我正在使用以下技术:
让我们在下面做:
npm i -g @vercel/ncc
ncc build app.ts -o dist(我的入口文件是app.ts,输出在dist文件夹中,确保你在package.json和app.ts所在的文件夹中运行,上面运行后你可能会看到index.js文件在文件夹 dist 中)
npm install -g pkg(安装 pkg)
pkg index.js(确保您在上面的 dist 文件夹中)
可能还有许多其他选择,但据我所知,GitHub https://github.com/zeit/pkg上有一个项目正在积极开发中。 你可以玩它。 在https://github.com/nexe/nexe 上还有一个,但不在积极开发中。
有一个名为nodebob的开源构建工具项目。 我假设工作平台窗口,
您将在发布文件夹中找到可执行文件。
注意:您还需要 python 和 pip(或 easy_install)才能使其工作。
使用nodeenv创建节点虚拟环境(使用python -m pip install nodeenv
)(使用python -m nodeenv envname
进行python -m pip install nodeenv
)
使用节点虚拟环境的 exe 文件(存储在./envname/Scripts/node.exe
)创建一个 .bat 文件启动代码,然后使用一些 bat 到 exe 转换器( http://www.battoexeconverter.com/)idk然后分发除 bat 文件之外的所有文件,使用 exe 转换文件,而不是通过使用某些程序将它们制作成安装程序。 你去吧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.