有没有办法在节点中同步执行多个JavaScript文件?

所以在Node中,我可以使用如下命令执行JavaScript文件:

$ node src/someFile.js 

但有没有办法同步执行给定目录中的所有 JavaScript文件(一个文件执行,然后完成下一个执行等)? 基本上,有一个单一的命令会有类似的效果

 $ node src/firstFile.js $ node src/secondFile.js $ node src/thirdFile.js ... 

我已经尝试过类似的命令

 $ node src/*.js 

但没有成功。

如果不存在这样的命令,那么做这种事情的最好方法是什么?

我不知道这是否会为你工作,因为这是一个function的shell而不是节点运行时,但..

 for f in src/*.js; do node "$f"; done 

或者在PowerShell中:

 Get-ChildItem .\*.js | Foreach-Object { node $_ } 

你可以使用spawn从节点运行一个node进程

 (function() { var cp = require('child_process'); var childProcess = cp.spawn('node', [`src/firstFile.js`]); 

在这一点上,你必须添加一些监听器:

 // now listens events // Listen for an exit event: child.on('exit', function(exitCode) { console.log("Child exited with code: " + exitCode); return resolve(exitCode); }); // Listen for stdout data child.stdout.on('data', function(data) { console.log(data.toString()); }); // child error child.stderr.on('data', function(data) { console.log('err data: ' + data); // on error, kill this child child.kill(); } ); }).call(this); 

当然,你需要在这里序列化执行,但是这很容易,因为你有child.on('exit')告诉你这个过程结束了,所以你可以开始下一个。

看看在节点中控制多个进程,以便在节点中运行多进程并等待执行结束/join的示例工作解决scheme。

使用POSIXshell:

 $ for js in src/*.js; do node "$js"; done 

如果从shell中调用每一个东西并不是一个困难的要求,那么我会用shell中的单个节点进程将它们全部踢掉。 这个节点脚本会:

  • 遍历模块的目录
  • 需要第一个执行它,并传递模块在完成时调用的callback函数
  • 当完成callback被调用时,执行目录中的下一个脚本。