在node-webkit(nw)中运行后台任务

时间:2015-09-06 17:18:27

标签: node-webkit

我尝试使用NW.js运行后台任务(文件系统扫描程序)。

Electron中,可以使用child_process.fork (__dirname + '/path_to_js_file')并在主脚本中调用child.on('message', function(param) { ... })child.send(...)以及process.on('message', function(param) { ... })和{{}}来完成在子脚本中{1}}。

在NW.js中,我尝试使用Web Workers但没有任何反应(我的webworker脚本永远不会被执行)。

我还看到使用child_process.fork("path_to_js_file.js", {silent: true, execPath:'/path/to/node'})有一种解决方法,但这意味着将Node.js捆绑到我未来的应用程序中......

另一个想法?

1 个答案:

答案 0 :(得分:9)

这是我最终做的。

package.json中声明node-main属性:

{
  "main": "index.html",
  "node-main": "main.js"
}

然后在main.js使用require('child_process').fork

'use strict';

var fork = require('child_process').fork,
    childProcess = fork('childProcess.js');

exports.childProcess = childProcess;

childProcess.js使用process.on('message', ...)process.send(...)进行沟通:

process.on('message', function (param) {
    childProcessing(param, function (err, result) {
        if (err) {
            console.error(err.stack);
        } else {
            process.send(result);
        }
    });
});

最后在index.html,使用child_process.on('message', ...)child_process.send(...)

    <script>
        var childProcess = process.mainModule.exports.childProcess;
        childProcess.on('message', function (result) {
            console.log(result);
        });
        childProcess.send('my child param');
    </script>