在多个NPM包之间共享Mongoose实例

 风云再起2012668 发布于 2023-03-19 22:18
  • php
  • 为了将大型现有的Node + Express + Mongoose应用程序模块化为多个可安装的应用程序,每个应用程序都作为单独的NPM包开发,我们想知道在它们之间共享一个Mongoose实例是否是一个好主意?

    假设我们有一套NPM包,每个包含客户端资产,Mongoose模型和使用Express实现的REST-API.它们确实具有一些共同特征,但基本上被认为是单独的可重复使用的人工制品.主机应用程序(也是基于Express的)在各种根URI下安装它们:

    var discussions = require('discussions'),
        tickets     = require('tickets'),
        events      = require('events'),
        express     = require('express'),
        app         = express();
    
    var environment = { ...see below... };
    
    ...
    
    app.use('/events-api', events(environment));
    app.use('/tickets-api', tickets(environment));
    app.use('/discussions-api', discussions(environment));
    

    现在,由于events,ticketsdiscussions应用程序(独立的NPM包通过主机被拉package.json)使用猫鼬一样,主机应用程序本身,我们想通我们会在主机猫鼬例如通过某种environment对象,还包括其他的东西主机想要与已安装的应用共享.

    你看到这种方法有任何明显的缺陷吗?在这种情况下挂载的应用程序不会将Mongoose指定为各自的依赖项package.json,并且它们不会 require('mongoose') 像通常那样完成,而是从负责将Mongoose实例连接到MongoDB的主机获取Mongoose实例.

    如果这是一个坏主意,你建议每个子应用程序自己声明对Mongoose的依赖,每个NPM包将获得自己的Mongoose副本,并且每个都必须连接到MongoDB,对吧?

    一些背景信息:

    我们确实希望将应用程序包含在主机应用程序中,在单个进程中运行,而不是具有多个Node实例.主机包含用于身份验证和其他事物的中间件.

    我们确实希望将应用程序作为单独开发的NPM软件包包含在我们构建的各种主机应用程序的版本化依赖项中,而不是仅将其源代码复制到主机应用程序.

    我们意识到在多个安装的应用程序之间重用相同的Mongoose实例将使它们共享相同的模型命名空间.

    编辑:编辑完所有内容后澄清包结构npm install:

    host/
      assets/
      models/
      routes/
      node_modules/
        express/ ...
        mongoose/ ...
        events/
          assets/ ...
          models/ ...
          routes/ ...
        tickets/
          assets/ ...
          models/ ...
          routes/ ...
        discussions/
          assets/ ...
          models/ ...
          routes/ ...
    

    也就是说,events,tickets,和discussions应用程序不包括猫鼬(或快递)自己的,而是设计用来依赖于suppliesd这些依赖始终存在的主机应用程序.

    我们在这里假设一个NPM包tickets不能简单地 require从父母那里收集,对吗?

    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有