NodeJS 需要一个文件中的所有模块,好的做法?

NodeJS require all modules in one file, good practice?

我想知道从设计或安全的角度来看是否有任何缺点,让一个文件 requires() 我需要的所有模块,然后导出它们。这将使我无需跟踪每个文件中的所有模块。

示例:

// my_requires.js
const bodyParser = require('body-parser')
const parseForm = bodyParser.urlencoded({extended: false})

const DOMPurify = require('dompurify');
const {JSDOM} = require('jsdom');

const jwt = require('jsonwebtoken');
const passport = require('passport');
require('../config/passport')(passport)

module.exports = {
    bodyParser: bodyParser,
    parseForm: parseForm,
    jwt: jwt,
    passport: passport,
    bcrypt: bcrypt
}

然后在我需要它们的任何文件中,我只需要

const reqs = require('my_requires.js')

我不知道使用这样的构造是否有任何缺点。由于模块都加载到全局 space 我没有看到我的方法有任何缺点吗?

这是我在服务器文件中所做的典型事情。但是,它们中的大多数在我的代码中只使用了一两次,而且通常在服务器文件中使用。所以,只有当它们在很多地方使用时,我才有意义将它放在一个单独的文件中。其他情况我认为是重复代码。

对于使模块最容易在其他项目中重用的良好模块化设计,模块应该只包含它自己需要的东西,或者它绝对必须与他人共享的东西。

它不应该要求一些其他模块只是为了节省在其他地方打字的几个字母。没有理由这样做。模块由系统缓存,因此在需要它的模块中使用 require() 而不是从其他文件导出会使模块更独立,更独立并减少不必要的依赖性。

因此,如果您 require() 将所有内容都放在一个地方,然后将其导出,您就创建了一个巨大的相互依赖的项目,其中没有任何东西独立于其他任何东西。没有任何一个模块可以在其他项目中单独重复使用,因为一切都取决于特定于应用程序的核心应用程序文件。而且,通过摆脱模块独立性,您实际上获得了什么?可能只是节省了几行输入 - 仅此而已。

在 node.js 中从其他编程环境中加速时有点违反直觉,这些环境不像 node.js 那样实现模块化,但每个模块都应该以 require() 它所依赖的外部库的语句。是的,其中一些代码将在其他模块中重复,但我不认为这是不必要的重复,而是为了清晰和模块化而有组织的依赖关系声明。这是这个模块所依赖的。以下是为了重用此模块必须安装的内容。下面介绍如何独立于应用程序的其余部分使用此模块。

I couldn't figure out if there is any downside in using a construct like this. Since the modules are all loaded into the global space I don't see any downside of my approach?

没有什么是非黑即白的。有时有理由分享一组东西。但是,我会列出您的方法的这些缺点,并且我通常会避免使用该技术:

  1. 降低模块独立性和模块可重用性。
  2. 在查看代码时使模块依赖关系不那么明显。
  3. 使模块更难独立测试。
  4. 在不需要相互依赖来加载它们想要使用的内容的文件之间创建不必要的相互依赖关系。

有时您会发现您的许多模块同时需要一组通用模块。在这种情况下,不要将它们从应用程序导出到所有内容中。相反,创建一个新的可共享模块,导入那些其他模块并导出它们。然后,您保持了核心模块的独立性,并创建了一个新的可重用模块,它为您提供了一组您经常一起使用的模块。通过这种方式,您可以通过增加模块化和可重用性而不是减少它来解决相同的问题(并且您也可以节省一些输入)。