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

标签 javascript node.js node-modules dompurify

我想知道从设计或安全的 Angular 来看是否有任何缺点,让一个文件 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')

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

最佳答案

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

它不应该要求一些其他模块只是为了在其他地方保存几个输入字母。没有理由这样做。模块由系统缓存,因此使用 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. 在不需要相互依赖来加载它们想要使用的内容的文件之间创建不必要的相互依赖关系。

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

关于javascript - NodeJS 需要一个文件中的所有模块,好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47827661/

相关文章:

javascript - 我只想选择当前页面的所有记录

javascript - Ember - 如何清理 JSON 响应

javascript - jQuery.getScript 能否在 Chrome 开发者工具中将文件显示为资源?

angularjs - PhantomJS 1.9.8(Windows 7 0.0.0)错误引用错误: Can't find variable: angular

node.js - 如何使用密码保护 Harp.js 应用程序的子目录

javascript - D3JS TopoJSON 澳大利亚 map : projection accurate but no country rendered

node.js - 在 Socket IO 中向特定客户端发送消息

angular - 错误 : (SystemJS) XHR error (404 Not Found) loading ng2-appinsights

node.js - 将数组导出到 csv Nodejs

javascript - 在运行的 node.js 进程中动态加载 Node 模块