是否有一种方法可以在节点中同步执行多个JavaScript文件

Is there a way to synchronously execute multiple JavaScript files in node?

本文关键字:同步 节点 执行 文件 JavaScript 方法 一种 是否      更新时间:2024-06-01

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

$ node src/someFile.js

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

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

我试过这样的命令

$ node src/*.js

但没有成功。

如果没有这样的命令,那么做这样的事情的最佳方式是什么?

我不确定这是否适用,因为这是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'),它告诉您进程结束了,所以您可以开始下一个进程。

请参阅Controlling Multiple Processes in Node,以获得我的示例工作解决方案,该解决方案在node中运行多个进程,并等待执行结束/加入。

使用POSIX shell:

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

如果从shell调用每一个不是一个硬性要求,我会从shell中用一个节点进程来启动它们。此节点脚本将:

  • 遍历模块目录
  • 需要执行它的第一个,并传递回调,模块将在完成时调用该回调
  • 当调用完整的回调时,执行目录中的下一个脚本