我在使用Atom Electron时遇到问题child_process
。首先,我使用了预编译的二进制应用程序,你可以从电子的网站上下载:运行主进程为child_process
- 我使用Mac OS X上常用的预编译的二进制
- 在
myapp.app/Contents/Resources
我做了一个文件夹如上所述。 - 我在其中添加了一个简短的
package.json
,将index.js
设置为主脚本。
现在,如果我加入index.js
下面的代码片段:
'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操作(它应该是某种守护进程),然后从index.js
开始child.js
脚本作为child_process
。 child.js
应该可以打开窗户,其余的都可以。
所以这里是我的天真尝试。我只是剪切和粘贴的示例代码片段以上child.js
,然后进行编辑index.js
到以下几点:
var child_process = require('child_process');
var my_child = child_process.fork(__dirname + '/child.js');
相当小的,对不对?希望它能工作,但事实并非如此。当我双击我的漂亮的应用程序,没有任何反应。我敢打赌,我以微不足道的方式做错了什么,但我无法分辨出什么。
更新1我把它从我的包里拿出来,这样我就可以得到console.log
s。 child.js
死于错误require('electron')
:它似乎无法找到它。
更新2:我列出了child.js
的环境变量,并注意到ATOM_SHELL_INTERNAL_RUN_AS_NODE = 1
。我想我应该把它转到0
,但没有任何改变。
生成的进程是否应以分离模式运行?使我的'index.js'和'child.js'互相交谈对我来说很重要。 –
说实话,我并不太熟悉分离过程的产卵,尽管它似乎会阻止父母和孩子通过stdio管道进行交流。我建议打开一个问题来改变'child_process.fork()'以尊重'ATOM_SHELL_INTERNAL_RUN_AS_NODE'环境变量的现有值,而不是始终设置它。 –