分叉电子过程需要 "empty" 个电子
Forked electron process requires "empty" electron
我正在节点中构建一个命令行界面,它连接到一个后台命令行守护进程。如果没有 运行 守护进程,第一次调用 cli 时它将使用 child_process.fork
分叉守护进程
守护进程需要启动 electron BrowserWindow 的实例,但要求 electron 表现出异常行为。
如果运行守护进程在前台独立运行,则一切正常;但是在后台我需要电子时得到一个空模块。
向控制台打印 Object.keys(require('electron'))
显示数字序列 0..84
,打印 require('electron')
的结果显示字符串 /path/to/electron/dist/electron
打印出process.argv
表明分叉的脚本肯定是用electron执行的。
我被难住了。任何方向将不胜感激。
示例:
启动器
#!/usr/local/bin/electron
const cp = require('child_process');
console.log();
const cld = cp.fork(__dirname+'/daemon',{
stdio:['inherit','inherit','inherit','ipc']
});
cld.on('message', (code) => {
code = parseInt(code);
cld.disconnect();
process.exit(code);
});
守护进程
#!/usr/local/bin/electron
const fs=require('fs');
const log = (x)=>fs.appendFileSync('log',x+'\n\n');
log('');
if(!process.send) process.send = console.log;
log(process.argv);
const e = require('electron');
log(e);
log(Object.keys(e));
log(e.app);
process.send(0);
生成的日志文件
*removed*/lib/thirdparty/node_modules/electron/dist/electron,*removed*/tmp/daemon
*removed*/lib/thirdparty/node_modules/electron/dist/electron
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84
undefined
来自 运行 守护进程的日志文件
*removed*/lib/thirdparty/node_modules/electron/dist/electron,./daemon
[object Object]
clipboard,nativeImage,shell,app,autoUpdater,BrowserView,BrowserWindow,contentTracing,crashReporter,dialog,globalShortcut,ipcMain,inAppPurchase,Menu,MenuItem,net,netLog,Notification,powerMonitor,powerSaveBlocker,protocol,screen,session,systemPreferences,TopLevelWindow,TouchBar,Tray,View,webContents,WebContentsView
[object App]
forked 进程默认设置 ELECTRON_RUN_AS_NODE=1
并且不会公开任何电子特定模块:
正如 https://github.com/electron/electron/issues/6656 所说,您可能需要通过显式单独调用进程来解决问题,反之亦然。
我正在节点中构建一个命令行界面,它连接到一个后台命令行守护进程。如果没有 运行 守护进程,第一次调用 cli 时它将使用 child_process.fork
守护进程需要启动 electron BrowserWindow 的实例,但要求 electron 表现出异常行为。
如果运行守护进程在前台独立运行,则一切正常;但是在后台我需要电子时得到一个空模块。
向控制台打印 Object.keys(require('electron'))
显示数字序列 0..84
,打印 require('electron')
的结果显示字符串 /path/to/electron/dist/electron
打印出process.argv
表明分叉的脚本肯定是用electron执行的。
我被难住了。任何方向将不胜感激。
示例:
启动器
#!/usr/local/bin/electron
const cp = require('child_process');
console.log();
const cld = cp.fork(__dirname+'/daemon',{
stdio:['inherit','inherit','inherit','ipc']
});
cld.on('message', (code) => {
code = parseInt(code);
cld.disconnect();
process.exit(code);
});
守护进程
#!/usr/local/bin/electron
const fs=require('fs');
const log = (x)=>fs.appendFileSync('log',x+'\n\n');
log('');
if(!process.send) process.send = console.log;
log(process.argv);
const e = require('electron');
log(e);
log(Object.keys(e));
log(e.app);
process.send(0);
生成的日志文件
*removed*/lib/thirdparty/node_modules/electron/dist/electron,*removed*/tmp/daemon
*removed*/lib/thirdparty/node_modules/electron/dist/electron
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84
undefined
来自 运行 守护进程的日志文件
*removed*/lib/thirdparty/node_modules/electron/dist/electron,./daemon
[object Object]
clipboard,nativeImage,shell,app,autoUpdater,BrowserView,BrowserWindow,contentTracing,crashReporter,dialog,globalShortcut,ipcMain,inAppPurchase,Menu,MenuItem,net,netLog,Notification,powerMonitor,powerSaveBlocker,protocol,screen,session,systemPreferences,TopLevelWindow,TouchBar,Tray,View,webContents,WebContentsView
[object App]
forked 进程默认设置 ELECTRON_RUN_AS_NODE=1
并且不会公开任何电子特定模块:
正如 https://github.com/electron/electron/issues/6656 所说,您可能需要通过显式单独调用进程来解决问题,反之亦然。