我有一个我编写的节点应用程序,我按如下方式运行:
node.exe app.js inputArg
有什么方法可以将它自己打包成 .exe 吗?所以我可以做这样的事情吗?
App.exe inputArg
我有一些通过使用批处理文件来伪造它的方法,所以我可以这样做:
App.bat inputArg
但这要求我在该文件夹中拥有所有依赖项和节点,这并不理想。
我有一个我编写的节点应用程序,我按如下方式运行:
node.exe app.js inputArg
有什么方法可以将它自己打包成 .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
对于任何遇到这个问题的人,现在有两个项目可以从您的节点项目中创建 exe,Pkg和Electron.atom.io,它们略有不同:
我所知道的最好的工具是 NodeJS 工具:zeit/pkg
它非常易于使用(比 Nexe 多得多,仅作为示例),您只需全局安装即可:
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
.
这可能是通过全局设置解决本地问题,但您可以将文件与之关联 ,以便在命令提示符下键入script.js或双击/拖动项目到脚本上,将使用 Node 启动它们。.js
node.exe
当然,如果——像我一样——你已经将.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,如果你喜欢和陌生人一起上货车的话。