README
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
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加载