如何将快速服务器和 html 脚本捆绑到同一个 Node Webkit 应用程序中?

How to bundle an express server and html script into same Node Webkit application?

我在尝试使用 Node Webkit 将我当前的 Node.js 应用程序转变为桌面应用程序时遇到了极其困难的时期。在不使用 webkit 的情况下,我的应用程序可以完美运行。我在终端中使用 "Node app.js" 启动我的服务器。然后,当我连接到 localhost:8080 时,客户端连接并加载 index.html 页面;该应用程序然后完美运行。我需要所有这些都在桌面应用程序中发生,因此我使用了 Node webkit。

我不知道如何使用 Node webkit 实现这一切。我在网上搜索了几个小时,这似乎是一个常见问题,但没有人有一个体面且易于遵循的解决方案。如果有人可以帮助我,将不胜感激。

另外,我试过先在我的 package.json 文件中使用 "node-main" 属性 加载我的 node.js 文件,但这不起作用.出于某种原因,"node-main" 属性 每次我尝试使用它时都会使我的 webkit 应用程序崩溃。

如果有人能提供关于如何将所有这些实现到单节点 webkit 应用程序中的清晰演练,那将非常有帮助。谢谢!

对于桌面应用程序来说是一个非常奇怪的情况,但如果你真的需要它,你可以 运行 你的服务器首先使用 window.onload 方法中包含的子进程 [=14] =] 你的 NW 应用程序,使用这样的代码:

var exec = require('child_process').exec;
exec('node app.js ', function(error, stdout, stderr) {
    if (error !== null) {          
      throw error;
    }

    console.log('Server listening');
});

您需要使用 node-main 来完成您想要实现的目标。您的代码可能因异常而崩溃。

首先,将 node-main 添加到配置

"node-main": "index.js",

要调试代码,请使用附加未捕获的异常处理程序:

var report_error = function(err){
    if (typeof console == 'object' && typeof console.log == 'function') {
        console.log('Exception: ' + err.message, err.stack);
    } else {
        setTimeout(function(){report_error(err);},200);
    }

};
process.on('uncaughtException', function (err) {
    report_error(err);
});

请注意,我检查控制台是否可访问 - 当此脚本 运行 控制台尚不可访问时:

This symbol is not available at the time the script is loaded, because the script is executed before the DOM window load (source).

我遇到了类似的问题,因为我在 index.js 中使用了 console.log。在使用以下函数而不是 console.log 之后,我开始工作了:

var console_log = function(err){
    if (typeof console == 'object' && typeof console.log == 'function') {
        console.log(err);
    } else {
        setTimeout(function(){console_log(err);},200);
    }
};