有没有办法在节点中同步执行多个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被调用时,执行目录中的下一个脚本。