NodeJS的child_process模块exec方法卡死是什么原因?

这么一段简单的代码

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

exec('npm -v', (err, res, reserr) => {
    console.log(err, res, reserr)
})

运行起来就一直不输出结果,如下
图片描述

一直就这么卡着,谁知道这是什么原因?或者给点思路?

阅读 6k
2 个回答

忽忽悠悠就好了

话说是怎么好的,就是安装cnpm的时候(别问我为啥是cnpm,我一顿操作试出来的-_-),淘宝官方给出的命令如下:

npm install -g cnpm --registry=https://registry.npm.taobao.org

看见那个网址了么?https开头的那个,我需要把https替换成http(而我之前一直都用的https的地址),也就是执行如下命令:

npm install -g cnpm --registry=http://registry.npm.taobao.org

并且设置一下npm的registry也为上述地址

npm config set registry http://registry.npm.taobao.org

然后就好了。。。
后就好了。。。
就好了。。。
好了。。。
了。。。

好的不要不要的。。。
图片描述


各位大佬可以告诉我这是为啥么?

是你的主程序没有退出,最后一行添加 process.exit()

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

exec('npm -v', (err, res, reserr) => {
    console.log(err, res, reserr);
    process.exit();
})

参考nodejs官方api相关说明, 在windows下,你可能还需要尝试把你要执行的命令写在.bat文件里,然后给执行权限,比如写在my.bat里,然后:

exec('my.bat', (err, stdout, stderr) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(stdout);
  process.exit();
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题