【发布时间】:2019-01-17 04:45:53
【问题描述】:
当我使用电子打包器打包电子应用程序时。该应用程序产生一个使用“节点”命令的子进程。现在,如果我尝试在没有安装节点的系统中启动我的应用程序,该应用程序可以工作吗?
我一直在努力实现这一目标并面临各种问题,电子社区建议我使用 fork 方法,使用 'Process.execPath' 作为命令的 spawn 方法,并设置 ELECTRON_RUN_AS_NODE 变量,但我的目标似乎没有任何效果。
现在,在完成所有这些之后,我问自己,我肯定需要在我的系统上安装节点来运行应用程序吗?还是真的有一种方法可以将父环境(我相信它有节点)传递给子进程?如果是的话,我在这里想念什么?
需要注意的是,当从 GUI 应用程序运行时,我使用 'fixpath()' 在 macOS 上设置 $PATH。不确定这是否在我的代码中弄乱了某些东西。 https://www.npmjs.com/package/fix-path
请在下面找到我的代码:
'use strict'
const fixPath = require('fix-path');
let func = () => {
fixPath();
const child = childProcess.exec('node scriptPath --someFlags', {
detached: true,
stdio: 'ignore',
env: {
ELECTRON_RUN_AS_NODE: 1,
}
});
child.on('error', (err) => {
console.log("\n\t\tERROR: spawn failed! (" + err + ")");
});
child.stderr.on('data', function(data) {
console.log('stdout: ' +data);
});
child.on('exit', (code, signal) => {
console.log(code);
console.log(signal);
});
child.unref();
}
【问题讨论】:
-
如果您使用的是 electron builder 或其他电子打包工具,则该节点全部内置在安装程序/解包中。您无需安装节点即可执行分叉进程。它已经包含在内了......你应该能够做到...... require('child_process').execSync('mycommand.exe');
-
你能告诉我我的代码出了什么问题吗?
-
当您在示例的第 5 行执行 console.log fixPath() 时……您会得到什么?还有你在说什么,scriptPath?
-
console.log fixPath() 打印未定义,我通过 scriptPath 保留脚本的路径。
-
我很困惑....什么是“scriptPath”...您需要在 childProcess.exec 中指定位置路径,以便节点可以执行它...实际的节点脚本在哪里在你的文件系统上?
标签: node.js electron child-process electron-packager