有没有一种方法在node中同步执行多个JavaScript文件?

3

在 Node 中,我可以使用像这样的命令执行 JavaScript 文件:

$ node src/someFile.js

但是有没有一种方法可以同步执行给定目录中的所有JavaScript文件(一个文件执行,然后在它完成后执行下一个文件等)?基本上,是否有一个单一的命令可以产生类似以下效果的东西

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

我尝试了像

$ node src/*.js

但是没有成功。

如果不存在这样的命令,那么达成类似目的的最佳方法是什么?


使用特定于Shell的功能来回答您是否可以接受?(我看到您已经尝试过通配符匹配) - zetavolt
@ᅵZVᅵ 我目前正在运行Windows机器,因此对我个人来说,shell脚本可能不是最佳选择 - 但如果它解决了问题,那么它应该是一个完全有效的解决方案。 - Nick Zuber
我将通过 PowerShell 的结果来修复我的回答 –– 我认为最好使用 shell 来完成这个任务,除非你需要捕获他们的退出代码,在 CreateRemoteThread 中恢复他们的 SEH 链等。 - zetavolt
我离开了我的Windows电脑,请告诉我那个PowerShell脚本是否适用于你。 - zetavolt
4个回答

4

我不确定这对您是否有效,因为这是shell而不是node运行时的功能,但是...

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

或者在 Powershell 中:

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

2
您可以使用spawn命令在Node.js中运行一个子进程,例如: 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') 可以告诉你进程结束了,所以你可以开始下一个进程。
请参考 Node中控制多个进程 查看我的示例工作解决方案,可以在node中运行多个进程并等待执行结束 / 加入。

啊,所以在Node中没有一个简单的一行代码解决方案来处理这个问题,而是需要编写一个文件(就像你上面建议的那样)? - Nick Zuber
一行解决方案无法控制进程状态、退出代码和 pid。当然,你可以编写一个 bash 脚本,使用 for 循环语句执行 node $filename,等等,但你需要一个监管程序来处理所有这些进程,它可以用 bash、python、perl 或...node 编写。 - loretoparisi

1
使用 POSIX shell:
$ for js in src/*.js; do node "$js"; done

1
如果从shell中调用每个模块不是必须的话,我建议使用单个节点进程来启动它们。这个节点脚本将会:
- 遍历模块目录 - 要求第一个模块,并传递一个回调函数,该模块将在完成时调用它 - 当完成回调被调用时,执行你目录下的下一个脚本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接