Javascript module.export=[]是错误的做法吗?

Javascript module.export=[]是错误的做法吗?,javascript,node.js,Javascript,Node.js,我有两个模块,它们都需要访问共享阵列。我通过一个模块来解决这个问题,该模块只包含以下内容: sharedArray.js module.exports = []; 在模块中,我是这样使用它的: 模块1.js var arr = require('./sharedArray'); function addSomething() { // Add something to arr } var arr = require('./sharedData').myData; functio

我有两个模块,它们都需要访问共享阵列。我通过一个模块来解决这个问题,该模块只包含以下内容:

sharedArray.js

module.exports = [];
在模块中,我是这样使用它的:

模块1.js

var arr = require('./sharedArray');

function addSomething() {
    // Add something to arr 
}
var arr = require('./sharedData').myData;

function addSomething() {
    // Add something to arr 
}
module2.js

var arr = require('./sharedArray');

function doSomething() {
    // Use arr for something
}
var arr = require('./sharedData').myData;

function addSomething() {
    // Add something to arr 
}
这是可行的,但感觉不对(无用的空模块),我错过了一些明显的东西


有没有更好的方法,或者这就是你解决问题的方法?

这不是一个坏做法。这只是模块间共享数据的几个选项之一。用你现在的方式做这件事没有什么“错”


在node.js中的模块之间共享数据时,基本上有三种选择:

  • 可以有一个模块在加载时将数据分配给全局命名空间

  • 您可以使用某个模块的方法返回对数据的引用。该方法可以是模块构造函数或其他方法

  • 您可以使数据成为模块导出中静态数据结构的一部分。这基本上就是您现在正在做的,您只需将整个导出作为您的数组

  • 这三种方式都是完全合法的数据共享方式

    全局数据具有使用globals的典型缺点(影响全局名称空间,并且可能与甚至没有尝试使用此特定数据的模块发生冲突)

    当您还使用模块执行许多其他操作时,或者如果您根据需要生成数据而不是静态声明数据,则可以使用第二个选项

    对于第三个选项,如果您让模块返回一个对象,并且让数组成为该对象中的一个属性,这将使您的模块更具可扩展性,因为您还可以在该模块中拥有其他共享元素。但是,它的工作原理与您现有的一样,只是扩展性不强


    我个人可能会选择更具可扩展性的选项,这样您也可以在那里拥有其他共享项目:

    sharedData.js

    module.exports = {
        myData: [...],
        myOtherData: [...]
    };
    
    模块1.js

    var arr = require('./sharedArray');
    
    function addSomething() {
        // Add something to arr 
    }
    
    var arr = require('./sharedData').myData;
    
    function addSomething() {
        // Add something to arr 
    }
    
    module2.js

    var arr = require('./sharedArray');
    
    function doSomething() {
        // Use arr for something
    }
    
    var arr = require('./sharedData').myData;
    
    function addSomething() {
        // Add something to arr 
    }
    

    这只是Node.js使用的标准机制。怎么了?我更新了我的问题。基本上,仅仅为了这个目的,让一个文件和模块或多或少都是空的感觉很奇怪。我从未见过其他人这样做。我以前这样做是为了避免循环依赖。请务必清楚地命名您的模块,并/或留下一条注释,解释它用于哪些数据,可能还有一些数据消费/生产模块的示例。这样做没有错。好的,谢谢。我只想再次指出,该文件只不过是
    module.exports=[]
    。这不仅仅是一个例子。我想这就是我三思而后行的原因,也许它本身不应该是一个模块,因为它不包含任何初始数据。