【问题标题】:nodejs child process - Error: spawn node ENOENTnodejs子进程 - 错误:生成节点ENOENT
【发布时间】:2021-03-17 17:38:10
【问题描述】:

我正在使用此代码尝试生成一个需要运行脚本的子进程。

const child = require('child_process').spawn;
const path = require('path');
const script = path.format({dir: __dirname, base: 'myscript.js'});

    child('node', [script], {
        cwd: __dirname,
        env: {
            TEST_USERNAME: 'myuser',
            TEST_PASSWORD: 'mypassword'
        }
    }).on('error', (error) => {
        console.log(error);
    });

当我尝试运行 index.js 脚本时遇到此错误

Error: spawn node ENOENT
    at Process.ChildProcess._handle.onexit (node:internal/child_process:276:19)
    at onErrorNT (node:internal/child_process:476:16)
    at processTicksAndRejections (node:internal/process/task_queues:80:21) {
  errno: -2,
  code: 'ENOENT',
  syscall: 'spawn node',
  path: 'node',
  spawnargs: [ '/Users/dev/Desktop/cli-training/demo.js' ]
}

更新

inquirer.js 向用户提示了一些问题之后,我正在尝试运行子脚本。可能是这个问题吗?我注意到子进程不会被执行。在我的子脚本中,我有这段代码

const { IgApiClient } = require('instagram-private-api');
const chalk = require('chalk');

console.log(chalk.magenta('Starting child script'));

const ig = new IgApiClient();

console.log(process.argv);

我该如何解决?

【问题讨论】:

  • 我的猜测是,script 没有将正确的文件路径返回给myscript.js。你能在script 上做一个console.log 吗?
  • @fortunee 我在想我传递给它的 env 对象是错误的。我已经按照您的建议在脚本上完成了console.log,它将返回脚本所在的正确路径。也许我需要将 shebang #!/usr/bin/env node 也添加到子脚本中?
  • 我同意@fortunee。可能存在路径表示在不同平台上可能不同的情况。例如 / 应该替换为 \ 和/或您需要指定它的完整路径。
  • @Reborn 我做了一些调试,这不是路径相关的问题,但它与我试图传递给脚本的 env 对象有关。在文档中写到 env 需要一个键值对,但也许我以错误的方式传递它?

标签: node.js child-process


【解决方案1】:

如果你想在子进程中执行节点二进制文件,最好参考它的完整路径,你可以通过process.execPath找到它

这应该可以解决您的问题

child(process.execPath, [script], {
        cwd: __dirname,
        env: {
            TEST_USERNAME: 'myuser',
            TEST_PASSWORD: 'mypassword'
        }
    }).on('error', (error) => {
        console.log(error);
    });

【讨论】:

  • 这个方案解决了问题,谢谢。
猜你喜欢
  • 2018-10-31
  • 2013-09-21
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多