节点.js包括JS文件和设置变量

Node.js include JS file and set variables

本文关键字:设置 变量 文件 JS js 包括 节点      更新时间:2023-09-26

我正在使用Node.js来运行后台作业(没有前端)。我认为对我来说,运行 worker 的最佳方法是为每种作业提供一个文件(例如,我可以轻松地为每个服务器运行一个 worker )。

主.js

require('scribe-js')(); // github.com/bluejamesbond/Scribe.js
process.console = console;
...

worker_*.js

require('./lib/main');
console.tag('testing').log('this is a test');

console变量不会传递给 worker_*.js。我将其设置为main.js因为如果变量的值发生变化,我希望只能更改一次(在 main.js 中),而不是在每个 worker_*.js 文件中。知道吗?


我认为这不是重复的:我知道有很多"如何在 Node 的另一个 JS 文件中包含一个 JS 文件.js",答案通常是"使用 var s = require('yourfile'); "。我认为这个问题有点不同。

要在节点模块之间共享变量,您可以:

  1. 导出模块的方法,然后调用该方法并向其传递要共享的变量或
  2. 您可以将变量设置为全局变量。

首选方法是通过导出的方法显式共享变量,然后让模块存储自己的变量副本。 有关全局变量的信息,请参阅此处。

在您的情况下,为每个工作线程支持一个通用构造函数并向工作线程传递一个对象可能很有意义,您可以在其上放置属性以将相同的变量共享给每个工作线程。

所以,你会这样:

worker_1.js

var savedArgs;
module.exports = function(args) {
    savedArgs = args;
}

然后,当加载worker_1.js时,您将执行以下操作:

var args = {console: process.console};
require('./worker_1.js')(args);

模块的设计应尽可能自包含(例如,不依赖于全局状态),以鼓励模块化和可重用性。 他们应该require()他们需要的内容,并且他们完成由其他模块创建的工作所需的任何应用配置或单例都应在其构造函数中或通过其他导出方法提供给他们。