【发布时间】: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