npm 包 egg-mount 使用教程

阅读时长 7 分钟读完

前言

当我们使用 Egg.js 开发 Web 应用时,常常需要将不同的模块拆分为多个子应用,比如前后端分离,或将不同模块分开部署等。此时,我们需要一个能够方便地进行子应用挂载的工具。

Egg.js 官方提供的 egg-subapp 插件能够实现子应用的挂载,但是由于其设计过于灵活,使用起来比较复杂。而 egg-mount 插件则是在 egg-subapp 的基础上进行了一定的简化和优化,使得使用更加方便。

本篇文章将介绍 egg-mount 的使用方法,以及如何在 Egg.js 中实现子应用的挂载。

egg-mount 简介

egg-mount 是一个基于 Egg.js 框架的子应用挂载插件,支持将 Egg.js 中的某个路径挂载到指定的域名或路径上。使用 egg-mount 可以方便地实现多个子应用的管理和部署。

egg-mount 使用方法

安装 egg-mount

在 Egg.js 应用中使用 egg-mount 插件,需要先进行安装。我们可以在应用根目录下使用 npm 进行安装:

安装完成后,在应用的 package.json 中可以看到 egg-mount 的依赖已经被自动添加。

配置 egg-mount

在 Egg.js 应用中使用 egg-mount 插件,需要在应用的配置中启用它。我们可以在应用的 config/plugin.js 文件中进行配置:

在配置完成后,重启应用即可激活插件。

使用 egg-mount

egg-mount 的使用非常简单,只需要在应用中使用中间件即可:

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

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

在应用的 middleware 中心注册中间件:

以上示例中,我们使用 app.use 方法进行子应用的挂载,并且指定了路由为 /api。此时,我们访问 http://localhost:7001/api 即可访问到挂载的子应用,其中 app.resolveMiddleware('proxy') 是解析 Egg.js 内置中间件 proxy 的方法。

注意:上述配置中的 '/api' 和对应的 middleware 中路径需要一致,且不得与其他路由冲突。

实现子应用挂载

上述示例中的子应用挂载是将另外一个 Egg.js 应用挂载到当前应用中,也可以将其他应用(比如一个 Express 的应用)挂载到 Egg.js 中。

挂载 Express 应用

在 Egg.js 应用中使用 express 中间件,需要先安装 express 模块。

在 Egg.js 应用中,我们可以在 config/config.default.js 中进行配置:

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

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

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

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

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

在配置完成后,我们可以以类似于下面这种方式访问该子应用:

上述示例中,我们使用了 Express 中间件,并定义了一个 subapp1 应用,并将其挂载到 /subapp1 路径下。

挂载 React 应用

如果是一个 React 应用,并且使用了 webpack 打包,一种实现子应用挂载的方式是将 React 应用打包成一个 js 文件,并通过 Egg.js 中间件进行加载。

具体操作如下:

  1. 使用 yarn 或者 npm 安装 webpack、webpack-cli、webpack-dev-middleware、webpack-hot-middleware、express 等依赖。

  2. 在 React 应用中的 package.json 中添加以下代码:

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

其中启动命令为 yarn startnpm start

  1. 配置 webpack.config.js,将 React 应用打包为一个 js 文件:
-- -------------------- ---- -------
----- ------- - -------------------
----- ----------------- - -------------------------------

-------------- - -
  ------ -----------------
  ----- --------------
  ------- -
    --------- -----------
    ----- --------- - --------
    ----------- ----
  --
  -------- -
    --- -------------------
      --------- -------------------
      --------- ---------------
    ---
  --
--
  1. 在 Egg.js 应用中使用 express 中间件,加载前述打包出来的子应用 js 文件:
-- -------------------- ---- -------
----- ---- - ----------------

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

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

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

其中 app1.use('/subapp1', express.static(path.join(__dirname, '../subapp1/dist'))) 是将 /subapp1 路由挂载到子应用的 dist 目录下。

总结

本篇文章介绍了 egg-mount 的使用方法,以及如何在 Egg.js 中实现子应用的挂载。使用 egg-mount 可以方便地进行多个子应用的管理和部署,通过本文的介绍不难看出,在 Egg.js 应用中使用 egg-mount 插件非常简单,既可以将另外一个 Egg.js 应用挂载到当前应用中,也可以将其他应用(比如一个 Express 应用或 React 应用)挂载到 Egg.js 中。希望本文对读者有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60056cd681e8991b448e6731

纠错
反馈