我使用Node.js来运行后台作业(没有前端)。我认为运行worker的最好方法是为每种工作提供一个文件(就像我可以轻松地为每个服务器运行一个工作者)。
main.js
require('scribe-js')(); // github.com/bluejamesbond/Scribe.js
process.console = console;
...
工人_ *。JS
require('./lib/main');
console.tag('testing').log('this is a test');
console
变量未传递给worker _ * .js。我在main.js
中设置它,因为如果变量的值发生了变化,我希望能够只更改一次(在main.js中)而不是每个worker _ * .js文件。有什么想法吗?
我认为这是不重复:我知道有很多"我如何将JS文件包含在另一个JS文件中Node.js的"答案通常是"使用var s = require('yourfile');
"。我认为这个问题有点不同。
答案 0 :(得分:2)
要在节点模块之间共享变量,您可以:
首选方法是通过导出方法显式共享变量,然后让模块存储自己的变量副本。有关全局变量的信息,请参阅here。
在您的情况下,为每个worker支持一个公共构造函数并向worker发送一个可以放置属性的对象以向每个worker共享相同的变量可能很有意义。
所以,你是这样的:
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()
他们需要什么,他们需要的任何应用程序配置或单件,以便他们的工作由其他模块创建应该在他们的构造函数或通过其他一些导出的方法给他们。