Eggjs学习系列(八)加载器

Egg.js 是基于 Koa 的框架,其加载器负责加载应用、框架和插件的代码,实现不同功能。加载顺序遵循插件、框架、应用的依赖关系,先加载被依赖的。Loader API 包括 loadFile、loadToApp、loadToContext 等,允许扩展和自定义加载行为。框架提供多个生命周期函数,如配置加载前、应用启动完成等,供开发者处理不同阶段的任务。
摘要由CSDN通过智能技术生成

Egg 是在 Koa 基础上封装并增加了一些约定的框架,通过加载器(Loader)来加载不同目录下代码,实现各种的功能,要开发 Eggjs 插件和框架,首先要了解 Eggjs 的加载器。

应用、框架、插件

要了解加载器,首先要了解 Egg 框架的结构。Egg 应用通过框架运行起来并根据功能需要加载插件。插件只完成特定功能,通过配置依赖,在 config/plugin.ts 中开启插件。

import {
    EggPlugin } from 'egg';
const plugin: EggPlugin = {
   
  // 设置 mysql
  mysql: {
   
    enable: true,
    package: 'egg-mysql',
  },
};
export default plugin;

框架 (framework) 不但用于启动应用,还封装了各种插件、功能。框架是可以继承的,比如在 Egg 基础上开发新的框架,也可以同时使用两个框架。

下面是官网展示的 Egg.js架构图。

+-----------------------------------+--------+
|      app1, app2, app3, app4       |        |
+-----+--------------+--------------+        |
|     |              |  framework3  |        |
+     |  framework1  +--------------+ plugin |
|     |              |  framework2  |        |
+     +--------------+--------------+        |
|                   Egg             |        |
+-----------------------------------+--------|
|                   Koa                      |
+-----------------------------------+--------+

加载单元

Egg 将应用、框架和插件都称为加载单元(loadUnit),加载按照 插件、框架、应用依次进行(被依赖的先加载)。

// egg-core/lib/loader/egg_loader.js  
/*
 * 获取所有加载单元
 */
getLoadUnits() {
   
    if (this.dirs) {
   
        return this.dirs;
    }
    const dirs = this.dirs = [];
	// 添加插件路径
    if (this.orderPlugins) {
   
        for (const plugin of this.orderPlugins) {
   
            dirs.push({
   
                path: plugin.path,
                type: 'plugin',
            });
        }
    }
    // 添加框架路径
    for (const eggPath of this.eggPaths) {
   
        dirs.push({
   
            path: eggPath,
            type: 'framework',
        });
    }
    // 添加应用路径
    dirs.push({
   
        path: this.options.baseDir,
        type: 'app
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值