我在使用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'環境變量的現有值,而不是始終設置它。 –