是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:
-
您可以有一个模块在加载时将数据分配给全局名称空间。
-
你可以有一个返回数据引用的模块的方法。 该方法可以是模块构造函数或其他方法。
-
您可以使数据成为模块导出中的静态数据结构的一部分。 这基本上就是你现在正在做什么,你只是让整个出口成为你的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 }