【发布时间】:2016-05-28 20:49:33
【问题描述】:
我无法让child_process 与 Atom Electron 一起工作。首先,我使用的是预编译的二进制应用程序,你可以从 Electron 的网站下载:
- 我在 Mac OS X 上使用通常的预编译二进制文件。
- 在
myapp.app/Contents/Resources中,我按照说明制作了一个文件夹应用程序。 - 我在其中添加了一个简短的
package.json,将index.js设置为主脚本。
现在,如果我向index.js 添加以下 sn-p:
'use strict';
var electron = require('electron');
var app = electron.app;
const BrowserWindow = electron.BrowserWindow;
var mainWindow;
function createWindow () {
mainWindow = new BrowserWindow({width: 800, height: 600});
mainWindow.loadURL('file://' + __dirname + '/index.html');
mainWindow.webContents.openDevTools();
mainWindow.on('closed', function()
{
mainWindow = null;
});
}
app.on('ready', createWindow);
app.on('window-all-closed', function () {
if (process.platform !== 'darwin')
{
app.quit();
}
});
app.on('activate', function () {
if (mainWindow === null)
{
createWindow();
}
});
(这基本上是让事情正常工作的示例代码)一切正常。我得到了窗口,我可以让它做任何事情。
现在,出于与更新相关的原因,我需要稍微改变这个范式。我需要的是能够从 index.js 执行几项任务 无需进行任何 gui 操作(它应该是某种守护进程),然后启动一些 child.js 脚本为来自index.js 的child_process。 child.js 应该可以打开窗口和其他所有东西。
所以这是我天真的尝试。我只是将上面的示例 sn-p 剪切并粘贴到 child.js 中,然后将 index.js 编辑为以下内容:
var child_process = require('child_process');
var my_child = child_process.fork(__dirname + '/child.js');
非常少,对吧?希望它会起作用,但它没有。当我双击我漂亮的应用程序时,什么也没有发生。我敢打赌,我做错了一件微不足道的事情,但我不知道是什么。
更新 1 我将它从我的包中移出,以便获得 console.logs。 child.js 在require('electron') 处因错误而死:似乎无法找到它。
更新 2:我在 child.js 中列出了环境变量,并注意到了 ATOM_SHELL_INTERNAL_RUN_AS_NODE = 1。我想我应该把它转为0,但没有任何改变。
【问题讨论】:
标签: node.js child-process electron