让child_process
与Atom Electron合作让我感到很麻烦。首先,我使用的是预编译的二进制应用程序,您可以从Electron的网站下载:
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操作(它应该是某种守护进程)然后启动一些{{1来自child.js
的{{1}}脚本。 child_process
应该能够打开窗户以及其他所有窗口。
所以这是我天真的尝试。我只是在index.js
剪切并粘贴了上面的示例代码段,然后将child.js
编辑成以下代码:
child.js
相当小,对吗?希望它会起作用,但它没有。当我双击我漂亮的应用程序时,没有任何反应。我敢打赌,我是以一种微不足道的方式做错事,但我不能说出什么。
更新1 我将其从我的包中移出,以便我可以获得index.js
个。 var child_process = require('child_process');
var my_child = child_process.fork(__dirname + '/child.js');
的{{1}}因错误而死亡:它似乎无法找到它。
更新2 :我在console.log
中列出了环境变量,并注意到child.js
。我想我应该把它变成require('electron')
,但没有任何改变。
答案 0 :(得分:0)
在Electron child_process.fork()
中会生成具有ATOM_SHELL_INTERNAL_RUN_AS_NODE
环境变量集的子项,这意味着子进程中没有Chromium功能可用(因此没有Electron内置模块),所有你和#39; ll get是vanilla Node运行时加上可以在ASAR文件中读取的修补fs
。如果您查看child_process.fork()
的代码,您会发现无法覆盖ATOM_SHELL_INTERNAL_RUN_AS_NODE
的值。如果可以的话,请使用child_process.spawn()
,否则我猜您可以尝试打开问题,并询问Electron团队是否愿意修改当前行为。