在nodejs中束缚导入和导出

问题描述 投票:0回答:1

我正在寻找一种文件结构,以便我有一个'模块'文件,该文件可导出一堆...模块。

我知道,一般来说,任何必需的模块都会被缓存,因此在其首次导入后不会读取/执行,但是我想知道对于导入/导出链(其根导入已作为定义的常数。

例如

// modules.js
const fs = require('fs');

module.exports = {
  fs
};

------------------

// file1.js
const { fs } = require('modules.js');

------------------

// file2.js
const { fs } = require('modules.js');

file1和file2是否收到相同的fs缓存副本?这很重要,因为我的某些模块需要初始化,并且我不希望此代码多次执行。

P.S。这样做的主要目的是使我可以在一个位置上需要特定的模块。如果有更好的方法,请教育我!

提前感谢。

javascript node.js import export require
1个回答
0
投票

file1file2是否收到fs的相同缓存副本?这很重要,因为我的某些模块需要初始化,并且我不希望此代码多次执行。

是,模块已缓存。因此,除非您手动进入缓存以从缓存中删除模块,否则已加载的模块将在加载后的第二,第三,第四等时从缓存中获取。它只会被初始化一次。这是node.js模块设计原理的基础(并且非常有用)。

整个要点是,这样我可以有一个位置来要求使用特定的模块。如果有更好的方法,请教育我!

我强烈建议您不要做您在问题中所表现的事情。如果需要fs模块,则只需直接包括fs模块。按照您的建议进行操作不会节省任何费用,只会使真正的依赖关系和联系模块混淆在一起,从而使它们难以单独重用。模块化的全部要点是,您可以构建独立代码,可重用代码和可测试代码的中小型块,而这些代码不会与其余代码交织在一起,并且清楚地阐明了它们自己的依赖性。将事物链接到某个中间modules模块只会掩盖所有事物,并在不需要时在事物之间建立联系。它还可以使单个模块的测试复杂化。

看看通常会发生什么。您开始创建modules模块。 FileA需要其中四件事,因此您将这四件事放入其中。 FileB需要3个普通的,但另外两个。因此,现在modules模块中有6样东西。但是,您现在已经使FileA依赖于它实际上不依赖的modules模块中的2个模块,并且FileB现在依赖于它实际上不依赖的modules模块中的1个模块。用其他几种方式扩展此方法,您很快就会陷入一大堆错误的依赖关系。要在另一个项目中实际重用给定的模块,您现在需要投入的远远超出了实际需要。在任何较大的项目中,这都会很快变得混乱。

即使您仅在另一个模块需要所有模块的情况下才使用module模块,仅在需要它们的模块中指定实际需要的模块,您实际上获得了什么?您试图节省少量的键入操作,但使依赖项的整洁性和重用的简单性变得复杂。 IMO,这不是正确的权衡。

由于某些原因,当他们第一次开始在node.js上进行编程时似乎会发生这种情况(但是我对它的全部理解尚不完全清楚),很多人发现他们希望避免在开始时手动键入模块依赖项。每个模块。也许是因为我们不应该重复代码行的想法,因此在第二次和第三次我们将类似的模块依赖项键入新模块的开头时,我们强烈希望将其封装在一些通用代码中。通常,这是一个不错的主意,但在这种特定情况下,由于对模块化,独立性和可测试性的妥协,因此并非如此。我认为这是在使用node.js模块进行编程时要习惯的东西,并且是对模块进行编码的更好方法。不要创建中间聚合模块,这些模块不会增加实际价值,只会掩盖实际的依赖关系。

© www.soinside.com 2019 - 2024. All rights reserved.