如何从主 node.js 脚本运行多个 node.js 脚本?

Posted

技术标签:

【中文标题】如何从主 node.js 脚本运行多个 node.js 脚本?【英文标题】:How can I run multiple node.js scripts from a main node.js scripts? 【发布时间】:2015-02-18 02:09:05 【问题描述】:

我对 node.js 完全陌生。我有两个要运行的 node.js 脚本。我知道我可以单独运行它们,但我想创建一个运行这两个脚本的 node.js 脚本。主 node.js 脚本的代码应该是什么?

【问题讨论】:

你可以把这两个脚本做成模块,每个模块都导出一个主函数。你require()他们并在每一个上执行一个主函数。 【参考方案1】:

您需要做的就是使用 node.js 模块格式,并为每个 node.js 脚本导出模块定义,例如:

//module1.js
var colors = require('colors');

function module1() 
  console.log('module1 started doing its job!'.red);

  setInterval(function () 
    console.log(('module1 timer:' + new Date().getTime()).red);
  , 2000);


module.exports = module1;

//module2.js
var colors = require('colors');

function module2() 
  console.log('module2 started doing its job!'.blue);

  setTimeout(function () 

    setInterval(function () 
      console.log(('module2 timer:' + new Date().getTime()).blue);
    , 2000);

  , 1000);


module.exports = module2;

代码中的setTimeoutsetInterval 仅用于向您展示两者同时工作。第一个模块一旦被调用,就会每 2 秒开始在控制台中记录一些内容,而另一个模块首先等待 1 秒,然后每 2 秒开始执行相同的操作。

我还使用了npm colors package 来允许每个模块使用其特定颜色打印其输出(以便能够首先在命令中运行npm install colors)。在此示例中,module1 打印 red 日志,module2blue 中打印其日志。这一切只是为了向您展示如何在 javascriptNode.js 中轻松实现并发。

最后从主要的Node.js 脚本运行这两个模块,这里命名为index.js,您可以轻松做到:

//index.js
var module1 = require('./module1'),
  module2 = require('./module2');

module1();
module2();

并像这样执行它:

node ./index.js

然后你会得到这样的输出:

【讨论】:

如果一个模块阻塞然后全部阻塞? @Haketo 快速回答是肯定的。但关键是 NodeJS 不提供多线程解决方案,并且 NodeJS 和 JavaScript 中的主要并发模型基于 Event Loop。 setTimeout 和 setInterval 都使用这个事件循环功能只是为了防止我们阻塞 IO。更具体地说,您可以使用 Web Workers 来实现类似于多线程方法的解决方案,但工作人员仍然来自单个 Node 进程。 @Haketo 在 JavaScript 和 NodeJS 的世界中有很多众所周知的做法被认为是不利于阻止我们阻塞 IO。在 NodeJS 世界中,著名的同步 fs.readFile 就是其中之一,而在浏览器中同步 XHR 请求是阻塞整个线程的另一种不好的做法。 @Haketo 如果对 WebWorker 解决方案感兴趣,请查看webworker-threads。【参考方案2】:

您可以使用child_process.spawn 来同时启动每个 node.js 脚本。或者,child_process.fork 也可能满足您的需求。

Child Process Documentation

【讨论】:

以上是关于如何从主 node.js 脚本运行多个 node.js 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

启动 Node.js 控制台时如何运行脚本?

如何让运行 Node.js 脚本的 cron 作业从 .env 文件中读取变量?

如何使用 Google API 服务库 (Node.js) 运行 Google 应用脚本

如何像使用 PHP 一样在我的 HTML 页面中运行 Node.js 脚本?

node.js安装后无法运行js脚本,并且node --help命令也报错

Node.js 脚本正在运行,但它不会停止!