Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我想在后台运行npm安装和grunt_Node.js - Fatal编程技术网

Node.js 我想在后台运行npm安装和grunt

Node.js 我想在后台运行npm安装和grunt,node.js,Node.js,所以我在节点中有代码,我想在后台运行npm安装和grunt。npm安装应在grunt运行之前运行。两者都应该异步地运行在系统中。如何使用node完成此操作?从node中取出命令,它将如下所示: const exec = require('child_process').exec; exec('npm install && grunt', (err, stdout, stderr) => { if (err) { console.error(err); r

所以我在节点中有代码,我想在后台运行npm安装和grunt。npm安装应在grunt运行之前运行。两者都应该异步地运行在系统中。如何使用node完成此操作?

从node中取出命令,它将如下所示:

const exec = require('child_process').exec;
exec('npm install && grunt', (err, stdout, stderr) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(stdout);
});
如果您想按描述运行这两个程序,那么在后台从shell运行

npm install && grunt &
要将输出写入文件,可以执行以下操作

const exec = require('child_process').exec;
exec('npm install && grunt', (err, stdout, stderr) => {
  fs.writeFile('outputOfNpmInstallPlusGrunt.txt', stdout, () => { ... })
}
相反,使用spawn时,它看起来像:

const spawn = require('child_process').spawn;

function makeRunner(name, cb) {
  var ls = spawn(name, []);
  var output =  '';
  ls.stdout.on('data', (data) => { output += data; });

  ls.on('close', (code) => {
    fs.writeFile(name.split(' ').join('-'), output, cb);
  });
}

makeRunner('npm install', () => makeRunner('grunt'));

这与使用spawn有什么区别?spawn会返回一个流,让您从派生的进程中侦听标准输出,并在每个标准输出发生时对其进行操作,如果您只是想直接运行它并在以后获得输出,那么这个exec就更简单了。您不需要运行
(npm安装和&grunt)&
如果要在后台同时运行这两个选项
npm install&&grunt&
将在前台运行
npm install
,然后在后台运行grunt。因此我想使用spawn,以便将输出写入文件。我如何使用spawn顺序运行这两个命令?@PaulHicks你是对的,我只是假设OP希望在尝试使用grunt之前完成npm的安装。