Skip to content
This repository has been archived by the owner on Apr 10, 2024. It is now read-only.

thx/kslite

Repository files navigation

kslite

kslite是一个短小精悍的模块管理程序。

包和模块管理:

模块名由包名,路径,文件名。三部分构成 如 {packagename}-{path_0}-...-{path_n}-{filename} 包类似 *.jar,每个包对应一个 codebase 即 classesroot。在 S.config.lt_pkgs 中配置 是一个 http 地址,如果没有则以为 kslite 所在地址为 base。 比如:

S.Config.lt_pkgs={
    inf:"http://a.alimama.cn/kslite/",
    test:"http://demo.taobao.com/tbad/kslite"
}

模块 inf-a 对应地址 http://a.alimama.cn/kslite/inf/a.js 模块 test-t-1 对应地址 http://demo.taobao.com/tbad/kslite/test/t/1.js

这样根据模块名称即可定位模块地址,所以不需要 add 预先注册模块即可直接 use。 add 不执行 attach。只有第一次 use 的时候才执行 attach。 add 同样支持 require。可以在载入 js 后根据 require 串行加载更多模块。已处理循环引用问题,办法很土。 暂时不支持 use 外部 JS 文件,如 use("jquery.js");

一些说明

文件使用utf-8编码, 在合并到别的工程的时候手工编码转换

使用方法

约定禁止不加模块id, 不允许使用下面的形式

// 文件及路径, test包下的math模块, 以下类似
//test/math.js 
KSLITE.declare([], function(require, exports){
    exports.add = function(a, b){
        return a + b;
    };
});

下面是正确的写法

// 文件及路径, test包下的math模块, 以下类似
//test/math.js 
KSLITE.declare('test-math', function(require, exports){
    exports.add = function(a, b){
        return a + b;
    };
});

//  test/program.js
KSLITE.declare('test-program', ["test-increment"], function(require, exports){
    var inc = require("test-increment").increment;
   exports.result = inc(1);
});

//  调用
KSLITE.provide(["test-program"], function(require){
    alert(require("test-program").result);
});

开放接口

所有方法绑定在全局变量KSLITE上

add(module, factory,[depenArry])

定义一个模块

declare(module,[,depenArry,] factory)

定义一个模块, 规定必须有模块名, 其中三个参数可以任意顺序

provide(module, callback)

使用模块

use(modules, callback)

使用模块 modules是以,分隔的模块名的字符串, 如'test-a, test-b'

path(module, callback)

返回对应的模块的地址

log( msg [,cat] )

msg : String 将要显示的信息

cat : String 信息的类别,默认是log

getScript( url[,success][,charset][, expando] )

获取一个脚本

url : String 脚本路径

success : Function 成功的回调函数

charset : String 字符集, 如果不设,默认与config里的一致

expando : Object 额外添加的属性的键值对

getScript( url[,attrs]) return Node

url : String 脚本路径

attrs : Object

{
  charset: String,
  success: Function,
  error: Function,
  timeout: Number,
  expando: Object
}

各属性同上

substitute(str,o[, regexp][, multiSubstitute]) return String

简易模板函数

str : String 模板字符串

o : Object 数据源

regexp : String 用于替换的正则, 默认为/\\?\{([^{}]+)\}/g

multiSubstitute : Boolean 是否多次替换,默认为true

//示例
var tmpl = "iam {a}, heis{b}";
var tmpl1 = "iam {{a}}, heis{{b}}";
var data = {
    a: 123,
    b: 234
};

KSLITE.log( KSLITE.substitute(tmpl, data) )  //return "iam 123, heis234"
KSLITE.log( KSLITE.substitute(tmpl1, data, /\{\{([^}])\}\}/g)) //return "iam 123, heis234"

clone(obj) return Object

obj : Object 被克隆的源

mix(r, s[,ov][, wl]) return Object

复制源对象上的键值到目标对象上

r : Object 目标对象

s : Object 源对象

ov : Boolean 是否强制覆盖

wl : Array 如果存在白名单,只覆盖白名单内的对象.

multiAsync

extend

iA(obj) return Boolean

判断是不是数组

iF(obj) return Boolean

判断是不是函数

iPO(obj) return Boolean

判断是不是一个纯对象,节点和window排除

iS(obj) return Boolean

判断是不是一个字符串

全局配置方法

KSLITEtimestamp

时间戳, 默认为当前kslite版本时间

KSLITEonLoad

kslite加载后执行的回调, 数组格式,加载后调用push方法直接执行

或者在加载完成后调用

KSLITEonLoad.push({
})

KSLITEpkgPaths

预定义的包

格式:包名@路径@charset

或者在加载完成后调用

KSLITEpkgPaths.push({
})

KSLITEcurrentScript

KSLITEdebug

测试结果

运行测试 totoro

 chrome 26.0.1410.43 / windows 7
  Passed all of 16 tests in 28ms (coverage 54.35%)

  firefox 23.0 / windows 8
  Passed all of 16 tests in 37ms (coverage 54.35%)

  ie 10.0 / windows 7
  Passed all of 16 tests in 60ms (coverage 54.35%)

  ie 6.0 / windows XP
  Passed all of 16 tests in 594ms (coverage 54.24%)

  ie 7.0 / windows XP
  Passed all of 16 tests in 2359ms (coverage 54.24%)

  ie 8.0 / windows 7
  Passed all of 16 tests in 437ms (coverage 54.30%)

  ie 9.0 / windows 7
  Passed all of 16 tests in 61ms (coverage 54.30%)

About

一个小巧精致的加载器

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published