1.1.0 • Published 8 years ago

draba-injector2 v1.1.0

Weekly downloads
1
License
Apache-2.0
Repository
github
Last release
8 years ago

draba-injector2

模块依赖以及加载工具,用来分离应用程序中的组件,可以使组件按需加载,能提高组件的可重用性。 由于此模块能减少组件的耦合,所以编写组件的测试变得容易。

下面介绍一个简单的例子来展示此模块的用法(具体代码见test/app目录)

目录结构

app
    |-modules
        |-modules
            |-mod1.js
            |-mod2.js
            |-mod3.js
        |-config.js
    |-app.js
    |-config.js

依赖关系:

"mod3" 依赖 "mod1"和"mod2"

mod1.js的内容

module.exports = Injector.define([], function () {
    return {
        message:'This is mod1.js'
    };
});

mod2.js的内容

module.exports = Injector.define([], function () {
    return {
        message:'This is mod2.js'
    };
});

mod3.js的内容

module.exports = Injector.define([
    'modules/mod1',
    'modules/mod2'
], createModule);

function createModule (mod1, mod2) {
    return {
        message:'This is mod3.js',
        mod1Message:mod1.message,
        mod2Message:mod2.message
    };
}

如何加载使用:

var Inject = require('draba-injector2');
var injector = new Injector([__dirname+'/test/app/modules']);
var mod3 = injector.inject(Inject.define(['modules.mod3'], function (mod3) {
    //now mod3 has been loaded
    return mod3;
}));

规则

模块名称格式

/^[0-9a-z_$\-]+([/][0-9a-z_$\-]+)*$/i

Api

Constructor Injector

params:

@includePaths <array> Injector的加载目录,可以提供多个文件路径
@loadedModules <object> 预先已经加载好的模块
@parentInjector <Injector> 父Injector

加载器会按照路径提供的顺序对模块进行加载,如果未找到指定的模块,会让parentInjector进行加载

Injector.define

params: @dependencies 依赖的模块 @functionInjected 模块主函数

Injector.prototype.inject

params:

@target <Module|other> Module是Injector.define生成的对象所属的类

如果是Injector.define生成的Module对象,则inject会根据Module的依赖完成加载
如果是其他类型,inject会直接返回target

Injector.prototype.load

params:

@moduleName <string> 模块名称

load会根据moduleName加载相应模块,如果在includePaths中未找到,则使用parentInjector加载

链接

express使用示例