【发布时间】:2017-11-08 09:16:15
【问题描述】:
我有一个从 CLI 运行的现有节点脚本,例如 node script.js --args。
我正在尝试构建一个 Electron 应用程序来替换 CLI。要运行实际的脚本,我可以使用child_process:
function run(arg) {
const script = spawn("node", ["./script.js", "run", "--arg", arg], { cwd: TOOLS_DIR, env: process.env });
script.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
script.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
script.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
}
但这仅在我从我的应用程序文件夹启动 electron 时才有效。当我使用 electron-packager 运行构建的应用程序时,run() 调用失败并出现错误:
Uncaught Error: spawn node ENOENT
构建的应用似乎无法运行node 命令。我安装了 NodeJS,但如果我登录 process.env.PATH,我注意到从构建的应用程序 /usr/local/bin(node 所在的位置)不在 $PATH 中,但如果我从我的应用程序文件夹运行 electron,它是。无论哪种情况,由于 Electron 在 NodeJS 上运行,是否有一种简单的方法可以从 Electron 应用程序运行节点脚本?
【问题讨论】:
-
您是否正在尝试制作一个在 scripts.js 中启动 Node.JS 应用程序的 Electron 应用程序?
-
基本上,是的。我的
script.js实际上使用docker-compose启动了一些 docker 映像。我尝试使用fork()而不是spawn()并且可以运行脚本而不会与env混淆,但后来我在脚本中的docker-compose上得到了ENOENT。
标签: node.js electron child-process