是module.export = 不好的做法?

我有两个模块,都需要访问共享数组。 我通过一个只包含以下内容的模块来解决这个问题:

sharedArray.js

module.exports = []; 

在模块中,我使用它是这样的:

module1.js

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

module2.js

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

这工作,但感觉错了(无用的空模块),我失去了一些明显的东西。

有没有更好的方法来做到这一点,或者这实际上是如何解决它?

这不是一个坏习惯。 它只是模块之间共享数据的几个选项之一。 按照你这样做的方式,没有什么“错误的”。


在node.js中的模块间共享数据时,基本上有三个select:

  1. 您可以有一个模块在加载时将数据分配给全局名称空间。

  2. 你可以有一个返回数据引用的模块的方法。 该方法可以是模块构造函数或其他方法。

  3. 您可以使数据成为模块导出中的静态数据结构的一部分。 这基本上就是你现在正在做什么,你只是让整个出口成为你的arrays。

三者都是完全合法的共享数据的方式。

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

当你对模块做了很多其他事情的时候,或者你是根据需求产生数据,而不是静态地声明,你可以使用第二个选项。

对于第三种select,如果你让模块返回一个对象,并让该数组成为该对象中的一个属性,这将使得你的模块更具可扩展性,因为那样你也可以拥有该模块中的其他共享元素。 但是,它的工作原理是一样的,它不是很可扩展的。


我个人可能会去更可扩展的选项,所以你可以有其他的共享项目:

sharedData.js

 module.exports = { myData: [...], myOtherData: [...] }; 

module1.js

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

module2.js

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