gpt4 book ai didi

node.js - 来自 Electron 的 Spawn 子 Node 进程

转载 作者:搜寻专家 更新时间:2023-11-01 00:05:24 25 4
gpt4 key购买 nike

我有一个从 CLI 运行的现有 Node 脚本,如 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 lives) 不在 $PATH 中,但如果我从我的应用程序文件夹运行 electron 它是。无论哪种情况,由于 Electron 在 NodeJS 上运行,是否有一种简单的方法可以从 Electron 应用程序运行 Node 脚本?

最佳答案

对于任何感兴趣的人,我最终通过使用 fork() 的组合让它在我的案例中起作用(它使用 Electron 打包的 NodeJS 运行时而不是依赖于客户端机器上安装的 NodeJS)并修补 env$PATH(以允许 script.js 命令本身产生一些命令):

const env = { ...process.env, PATH: `${process.env.PATH}:/usr/local/bin` };
const child = fork("./script.js", args, { cwd: TOOLS_DIR, env, silent: true });

不完整的 $PATH 是 Electron 中的一个已知问题,并且有 fix-path库作为解决方案,但由于某种原因我无法让它工作。

关于node.js - 来自 Electron 的 Spawn 子 Node 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44405523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com