我正在使用 Node.js 运行后台作业(无前端)。我认为运行工作程序的最佳方法是为每种作业创建一个文件(这样我可以轻松地在每台服务器上运行一个工作程序)。
main.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 文件”和答案通常是“use var s = require('yourfile');
”。我认为这个问题有点不同。
最佳答案
要在 Node 模块之间共享变量,您可以:
- 导出模块的方法,然后调用该方法并向其传递您要共享的变量或
- 您可以将该变量设置为全局变量。
首选方法是通过导出方法显式共享变量,然后让模块存储自己的变量副本。请参阅here有关全局变量的信息。
就您而言,为每个工作人员支持通用构造函数并向工作人员传递一个对象,您可以在该对象上添加属性以与每个工作人员共享相同的变量,这可能很有意义。
所以,你会这样:
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()
,并且他们需要的任何应用程序配置或单例,以便完成由其他模块创建的工作,应该在他们的构造函数中或通过其他导出来提供给他们方法。
关于javascript - Node.js包含JS文件并设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28291089/