Javascript Node.js包括js文件和设置变量

Javascript Node.js包括js文件和设置变量,javascript,node.js,Javascript,Node.js,我使用Node.js运行后台作业(没有前端)。我认为对我来说,运行worker最好的方法是为每种作业都有一个文件(这样我可以很容易地为每台服务器运行一个worker) main.js require('scribe-js')(); // github.com/bluejamesbond/Scribe.js process.console = console; ... require('./lib/main'); console.tag('testing').log('this is a te

我使用Node.js运行后台作业(没有前端)。我认为对我来说,运行worker最好的方法是为每种作业都有一个文件(这样我可以很容易地为每台服务器运行一个worker)

main.js

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

console.tag('testing').log('this is a test');
工人*.js

require('scribe-js')(); // github.com/bluejamesbond/Scribe.js
process.console = console;
...
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');
”。我认为这个问题有点不同。

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

  • 导出模块的方法,然后调用该方法并将要共享的变量或
  • 可以将变量设置为全局变量 首选方法是通过导出的方法显式共享变量,然后让模块存储自己的变量副本。有关全局的信息,请参阅

    在您的情况下,为每个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()。知道任何迷你框架吗?问题是,对于我的每个
    worker.*.js
    文件,我都需要编写
    process.console=globals.customConsole而不是只在我的
    main.js
    文件中保存一次。我正试图找出一个解决方案,所以我只定义了一次,它对所有包括
    main.js
    的工作人员都可用。编辑:奇怪,其中一条评论消失了。我把我的评论变成了答案。这就是我删除评论的原因。啊,好吧,我来检查答案。第二个代码块是main.js?因此,在main.js中包含worker_1.js而不是相反?@iDev247-我没有了解您是如何使用worker_1.js的。我以为你是从一个中心模块加载工人,所以我就是这样编码的,但是你可以用另一种方式来做。您可以将共享模块加载到worker中,然后通过调用导出的方法来查询它的单例数据。数据可以被拉取(您调用其他人的导出方法来获取数据)或推送(有人调用您的构造函数并提供数据),这取决于您的结构。两种方法都很好,明白了!看起来我仍然需要执行
    savedArgs.console.log()
    而不是
    console.log()
    。是这样吗?我真的很想找到一个解决方案,在这里我可以只做
    console.log()
    ,这样它对所有调试都是一个通用的更改。同意@iDev247,将您的控制台包装到某个方法或变量,并在main.js中使用module.exports看起来可能没有一种方法可以全局定义
    console
    。我可能会做什么(这并不是我真正想要做的):
    require('./lib/main')(函数(console){…worker code…})
    在main.js中,我将返回console作为参数。