Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

lloader

xiangle11ISC5.0.0

node.js模块分级、递归装载器

readme

lloader

node.js模块水平、分级装载器,通过预声明模块的加载等级,实现多应用同步扩展。

特性

  • 支持目录和模块分级深度加载

  • 支持多个目录同级加载

  • 支持api和配置文件两种方式定义加载项

  • 目录职责单一化,严格遵循约定,避免产生管理混乱

install

  npm install lloader

使用方法

单项目示例

const lloader = require('lloader');

const container = {};

const lloader = new Lloader("/home/project/", container);

lloader.add({
   "a.js": {
      "level": 1
   },
   "b.js": {
      "level": 1
   },
});

Lloader.load();

多项目示例

const lloader = require('lloader')

const container1 = {}, container2 = {};

const lloader = new Lloader("/home/project1/", container1, {
   "a.js": {
      "level": 1
   },
   "b.js": {
      "level": 1
   },
});

const lloader2 = new Lloader("/home/project2/", container2, {
   "a.js": {
      "level": 1
   },
   "b.js": {
      "level": 1
   },
});

Lloader.loadAll([lloader, lloader2]);

Lloader(dirPath, container, loads)

  • dirPath String 加载模块所在目录的绝对路径

  • container Object 装载数据根容器

  • loads Object 加载配置项

  • @return Object 装载器实例

添加目录装载项,返回当前目录配置实例

Lloader.loadAll([lloader]);

  • dirPath Array 包含多个Lloader实例的数组

Lloader静态方法,用于平行加载多个项目

lloader.add(options)

  • options Object - 所有子选项均为可选

    • $name Object, Boolean - 装载选项,$name对应目录名称或包含.js、.json后缀的文件名。当值为false时表示不装载该目录或模块

      • level Number - 加载等级

      • before(options) Function - 当前等级下所有目录、模块在加载前执行的钩子函数(仅在当前层级触发,不对子集继承)

        • data * - 当前目录、模块导出数据

        • dirList Array - 当前目录下的文件名列表

        • parents Object - 父节点

        • root Object - 根节点

      • module(data, name) Function - 模块加载完毕的回调函数,this指向当前层级容器。如果无数据返回,则该模块输出为空。

        • data * - 当前模块导出数据

        • name String - 当前模块名称,不含后缀

      • directory(data, name) Function - 目录加载完毕的回调函数,支持子集继承。如果无数据返回,则该目录结构不会被创建。

        • data Object - 当前目录下所有子集导出数据集合

        • name String - 当前目录名称

      • after(options) Function - 当前等级下所有目录、模块在加载后执行的钩子函数(仅在当前层级触发,不对子集继承),参数与before(options)一致

定义当前实例下的一级子节点的装载配置项。

lloader.load()

触发当前实例配置中的加载任务,仅作用于单个实例。

注意事项

由于lloader的主要应用场景是为node.js应用提供启动阶段的模块自动装载功能,为了简化代码、减少错误率,所有api均被设计为同步加载方式。因此不要在应用启动阶段以外的生命周期中使用lloader模块,否则可能会导致严重的node.js线程阻塞。

changelog

更新记录

1.0.3

  • ...load.js文件更名为.loader.js

  • 修改默认配置的加载等级为100

1.0.4

  • 不再隐式屏蔽模块内部抛出的错误

1.0.5

  • 阻止覆盖已存在的同名对象

1.0.6

  • 新增before、after钩子

  • 将import更名为module,complete更名为directory

1.0.7

  • 修改before、after钩子参数为data ,container

1.0.8

  • 忽略除.js和.json后缀以外的所有文件类型

1.1.0

  • 采用新的同级分组对象递归结构替换原来的列表结构

  • 修改before、after生命周期

1.1.1

  • 修复通过getter方式定义的属性在被同名属性覆盖时会报错的bug

1.1.2

  • 修复1.1.2中使用扩展运算符导致getter方式失效的bug

1.1.3

  • 放弃1.1.2中的for循环方式进行对象合并(在遇同名到getter时仍然报错,具体原因未知),依然选择使用1.1.1中的Object.assign()方案。使用外部解决方案,通过为getter添加对应的setter方法来解除赋值限制

1.2.0

  • 根据否包含配置文件判断装载模式,有配置文件为惰性模式,无配置文件为贪婪模式

1.2.1

  • 重新加入options.$name对Boolean类型的支持,用于解决在无.loader.js的贪婪模式下通过set(options)实现排除目录、模块的功能

1.3.0

  • 将...loader.js文件名替换为.loader.js

1.4.0

  • 使用深度混合代替Object.assign的单层混合

1.4.1

  • 暴露lloader.directorys数组,供外部读写

2.0.0

将lloader()的path参数由相对路径改为绝对路径

2.0.1

  • 支持在控制台打印加载流程,便于调试

  • 尽量保持与原生require api一致的模块加载特性

  • 如果目录下存在index.js文件,则目录的导出对象对应index.js,而不是所有子目录和文件的集合

4.3.0

重新加入对json文件类型的支持