node.js - 以编程方式使用 Node 子进程执行 'npm init',但无法知道它何时完成

标签 node.js child-process

我使用child_process.exec 运行npm init,我可以让它创建package.json,但是创建之后,我的标准输入似乎仍然打开,我想知道当我的子进程结束时,我可能会关闭标准输入,但我不知道它什么时候结束。

这是我的代码:

var child = exec('npm init', function (err, stdout, stderr) {

    console.log('over');
});
child.stdout.on('data', function(data) {

    process.stdout.write(data);

    //process.stdin.resume();
});
child.stdout.on('end', function() {
    console.log('end out');
});
child.stdout.on('close', function() {
    console.log('close out');
});
child.on('exit', function() {
    console.log('exit');
});
child.on('close', function() {
    console.log('close');
});
child.on('disconnect', function() {
    console.log('disconnect');
});

// read stdin and send to child process
process.stdin.on('readable', function() {

    var chunk = process.stdin.read();

    if(chunk !== null) {
        child.stdin.write(chunk);
    }
});

完成创建 package.json 后没有触发任何事件,那么完成后如何关闭它?

最佳答案

我遇到了同样的问题,最后以完全不同的方式解决了它。但我假设使用 spawn 而不是 exec。因为在这个post它假设用于 I/O 进程。

If you need to use handle process I/O with streams, such as when you are expecting large amounts of output, use child_process.spawn

如果你仍然想使用 exec,我已经通过检查 npm init 进程中的最后一个问题,然后触发 process.exit( 0) 写入 block 后。但这并没有让我开心,所以我没有使用它。

关于node.js - 以编程方式使用 Node 子进程执行 'npm init',但无法知道它何时完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28792241/

相关文章:

node.js - 有没有办法让 puppeteer 的 waitUntil "networkidle"只考虑 XHR (ajax) 请求?

node.js - 如何在 Visual Studio Code 中调试子 Node.JS 进程?

node.js - Node 的 max_old_space_size 是否影响子进程的内存限制?

node.js - 如何清理不在 package.json 中的包的 node_modules 文件夹?

node.js - 在 express.js 中验证用户数据后如何上传图像

node.js延迟的误解

c - system()函数的返回值

c - 如何生成遵循特定顺序的三个子进程?

node.js - node.js ChildProcess.fork() 中的字符编码

javascript - 用 webpack 中字段的值替换带有静态字段的对象