【问题标题】:Architectural approach to complex system in NodeJSNodeJS 中复杂系统的架构方法
【发布时间】:2016-11-26 06:04:24
【问题描述】:

我们正在使用 NodeJS 构建一个复杂的系统,该系统将包含多个由不同团队管理的部分,每个部分代表系统的一个单一功能。因此,将有一个“主应用程序”将这些部分或“模块”中的每一个都包含到基于 Web 的 UI 中(在撰写本文时使用 Express 服务器)。

每个Segment可能有一个或多个NodeJS模块,每个团队只有对各自Segment进行更改的权限,所以不能有单方面的跨团队干扰,每个Segment可以独立进行版本控制、测试和发布其他模块。

NodeJS 对我们来说是新的,我们正在努力理解如何构建这种方法,因为当您执行 require() 调用以包含一个包时,似乎存在一个基本假设,即存在一个单模块。因此,我们的一个基本问题是,如何包含一个允许从该包中对多个模块进行 require() 调用的包?另外,如何独立管理和版本每个段/包?

此外,从 Web 服务器的角度来看,如何将来自各种包(如 CSS、图像等)的资源组合起来以便从浏览器访问?

我们正在寻找建议、资源和知识——甚至可能有人到现场与我们就开发和部署环境的架构进行咨询——以帮助我们朝着正确的方向前进。任何输入表示赞赏。 :)

【问题讨论】:

    标签: node.js module architecture packages projects


    【解决方案1】:
    1. 由于您的团队是 node.js 的新手,首先要做的就是了解令人敬畏的 node.js 的包管理器,https://www.npmjs.com。如果你可以的话 了解他们如何管理 node.js 中的包/模块,然后你 将获得在团队中管理模块的基本概念。
    2. Using package.json 是了解如何管理和共享每个 独立模块。使用 npm 和 package.json 可以帮助您处理应用程序所需的模块和子模块的版本。
    3. Git 是你的好朋友。
    4. 您可能想尝试npm Enterprise,这是您的情况的解决方案。我并不是要你使用他们的服务,但如果你知道它是如何工作的,那对你的团队会有好处。
    5. 静态资产(css、图像等)应位于单独的存储库中,并在需要这些资产的所有模块之间共享。

    在你的情况下掌握起来并不容易,但是 Node.js + npm 的模块模型应该对你的团队有好处。

    【讨论】:

      【解决方案2】:

      您可以学习的最佳示例是 Express 中间件,例如 body-parser。它们曾经都在 Express 模块中。

      你可以这样调用 Express 3.x:

      const express = require('express');
      
      const app = express();
      app.use(express.bodyParser())
      

      在 Express 4.x 之后你必须这样调用:

      const express = require('express');
      const bodyParser = require('body-parser');
      
      app.use(bodyParser())
      

      来自Migrating to Express 4 指南:

      这意味着 Express 现在是一个独立的路由和中间件 Web 框架,并且 Express 版本控制和发布不受中间件更新的影响。

      如果没有内置中间件,您必须明确添加运行应用所需的所有中间件。

      因此,不要去调用单个模块并访问其所有子模块,而是创建单独的模块,这将是单独需要的。这是当今大型 NodeJS 模块中的常见模式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-30
        • 2010-12-17
        • 1970-01-01
        • 2012-03-15
        • 2022-08-20
        • 2010-10-04
        • 2021-11-26
        • 1970-01-01
        相关资源
        最近更新 更多