npm 并行运行子进程以使用NodeJS进行调试

llew8vvj  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(165)

我尝试根据这个API示例生成子进程:https://nodejs.org/api/child_process.html#spawning-bat-and-cmd-files-on-windows
我只想并行运行3个命令(来自NPM,如npm run x-script),并将它们的输出流到父进程,但我得到的结果是:
节点:事件:491

throw er; // Unhandled 'error' event

错误:生成npm运行调试js-watch ENOENT

  • 在进程.子进程.句柄.onexit(节点:内部/子进程:283:19)
  • 在onErrorNT(节点:内部/子进程:478:16)
  • 在processTicksAndRejections(节点:internal/process/task_queues:83:21)处的子进程示例上发出了“错误”事件,位置为:
  • 在进程.子进程.句柄.onexit(节点:内部/子进程:289:12)
  • 在onErrorNT(节点:内部/子进程:478:16)
  • 在进程滴答和拒绝(节点:内部/进程/任务队列:83:21)
{
  errno: -4058,
  code: 'ENOENT',
  syscall: 'spawn npm run debug-js-watch',
  path: 'npm run debug-js-watch',
  spawnargs: []
}

代码如下:

const path = require('path');
const { spawn } = require('node:child_process');

function runInParallel(command, argumentsList) {
    let childProcess = spawn(command, argumentsList);
    childProcess.stdout.on('data', (data) => {
        console.log(data.toString());
    });

    childProcess.stderr.on('data', (data) => {
        console.error(data.toString());
    });

    /*
    childProcess.on('exit', (code) => {
        console.log(`Child exited with code ${code}`);
    });
    */
}

runInParallel('npm run debug-js-watch', []);
runInParallel('npm run debug-css-watch', []);
runInParallel('npm run debug-serve', []);
js81xvg6

js81xvg61#

spawn接受一个命令和一个参数列表。你可以通过拆分字符串来修复这个问题。

function runInParallel(cmd) {
    const [ command, ...argumentsList ] = cmd.split(' ')
    let childProcess = spawn(command, argumentsList);
    // etc

runInParallel('npm run debug-js-watch');
// etc
bbmckpt7

bbmckpt72#

看起来spawn找不到npm。我不得不改用exec,它成功了:

const {exec} = require('node:child_process');

function runInParallel(cmd) {
    let childProcess = exec(cmd);
    ...
}

相关问题