add¶
Methods¶
- KISSY.add()¶
- void KISSY.add (name,fn[,config])添加模块
Parameters: - name (string) – 模块名
- fn (function) – 模块定义函数
- config (object) – 模块的一些格外属性, 包括
- config.attach (Boolean) – 默认 true,表示模块定义时是否执行定义函数 fn, 只有在 use 时才执行, 懒加载原则
- config.requires (Array<String>) – 模块的一些依赖项, 如果需要载入 css 则, 数组项为 .css 结尾名字
Note
模块名 name 也可以省略, 不过部署阶段需要使用 KISSY Module Compiler .
范例: 添加模块
KISSY.add("yourmod",function(S){}, { attach:false,// 模块定义时不会执行定义函数 fn, 只有在 use 时才执行, 懒加载原则 requires:['depMod1','depMod2','./mod.css'] // 该模块的一些依赖项, // 注意 css 为和模块 js 同目录下的 mod.css } );
如果依赖的模块 depMod1 以及 depMod2 的定义函数有返回值, 例如
KISSY.add("depMod1",function(){ function Mod(){} return Mod; }); KISSY.add("depMod2",function(){ function Mod(){} return Mod; });
那么该返回值会作为参数传入依赖 depMod1 以及 depMod2 的模块的定义函数, 例如
KISSY.add("custommode",function(S,DepMod1,DepMod2){ //use DepMod1 to refer depmod1's return value },{requires:["depmod1","depmod2"]});
当模块名称 name 为包内模块< 参见 下文包配置 >时, 则requires的模块名称可使用相对路径 refer 包内其他模块
// tc/mods/mod1 依赖于 tc/mods/mod2 KISSY.add("tc/mods/mod1",function(){},{requires:['./mod2']});
- KISSY.config()¶
- void KISSY.config (config)包配置, 为了摆脱模块必须使用前注册的繁琐
Parameters: - config (object) – 包含 key 为 packages 的配置项, 包括
- config.packages (Array) –
每个数组项为一个包的配置, 一个包配置包括 4 项:
- packages.name¶
类型字符串, 表示包名
- packages.tag¶
类型字符串, 最好为时间戳, 用于刷新客户端本包的模块文件缓存
- packages.path¶
- 类型字符串, 表示包所在的 url 路径, 相对路径表示相对于当前页面路径, 如果需要相对于当前执行脚本路径, 则需要自己处理:
var scripts=document.getElementsByTagName("script"); alert(scripts[scripts.length-1].src);
- packages.charset¶
类型字符串, 表示宝贝所有模块定义文件的编码格式, 默认 utf-8
- config.map (Array) –
每个数组项是一个长度为 2 的数组,每个位置的具体格式为
- 位置0
类型 RegExp,表示一个正则表达式.
- 位置1
类型字符串或函数,相当于调用 “str”.replace(位置0,位置1)。将请求路径中匹配位置 0 正则表达式匹配的内容替换为位置 1 的字符串值或返回结果.
map 范例:修改请求地址¶
S.config({ map:[ [/(.+myproject\/.+)-min.js(\?[^?]+)?$/, "$1.js$2"] ] });那么即使载入 kissy-min.js ,对于 myproject 目录下的模块 js 请求也会被替换为不带 -min 的请求, 该配置也可应用于 本地调试
map 范例:combo 使用的 kissy 组件¶
S.config({ map:[ [/http:\/\/a.tbcdn.cn\/s\/kissy\/1.2.0\/(?:overlay|component|uibase|switchable)-min.js(.+)$/, "http://a.tbcdn.cn/s/kissy/1.2.0/??overlay-min.js,component-min.js,uibase-min.js,switchable-min.js$1"] ] });那么当 use(“overlay,switchable”) 时只会产生一个 http://a.tbcdn.cn/s/kissy/1.2.0/??overlay-min.js,component-min.js,uibase-min.js,switchable-min.js 请求
packages 范例: 包配置¶
KISSY.config({ packages:[ { name:"tc", // 包名 tag:"20110323", // 动态加载包内的模块js文件时, // 自动加上 ?t=20110323, 用于文件更新 path:"../", // 包对应路径, 相对路径指相对于当前页面路径 charset:"gbk" // 包里模块文件编码格式 } ] });当要在包内添加模块时, 必须遵守一些约定:
一个模块的文件必须放在以包名命名的目录中
一个包下的所有目录的代码都应属于这个包,即包之间不能有重合目录。例如
- tc 的 path 为 http://x.com/y/
- tm 的 path 为 http://x.com/
这样就不行,在 ie 下会有包名不确定问题.
模块的名字必须取名从包目录开始到当前模块文件的文件路径名称, 例如 mod1.js 位于 tc/mods 下, 则 mod1.js 的模块取名:
KISSY.add("tc/mods/mod1",function(){});Note
模块名也可以省略, 不过部署阶段需要使用 KISSY Module Compiler .
压缩模块¶
若线上环境使用 kissy-min.js , 则请使用 closure compiler 对所有模块文件进行压缩, 例如 mod.js 压缩为 mod-min.js , 放在模块文件的同级目录下.
代码更新机制¶
由于动态加载的 js 文件不是写在页面中, 所以不能从页面添加时间戳, 并且1.2 loader新增的约定加载也不能配置具体模块文件路径, 因此 1.2 loader 提供了在包级别添加时间戳的机制
KISSY.config({ packages:[ { name:"1.2", //包名 path:"http://xx.com/" } ] });当更改包内模块后, 只需修改tag属性.
KISSY.config({ packages:[ { name:"1.2", //包名 tag:"20110323", path:"http://xx.com/" } ] });那么下载动态加载的 js 文件路径后面会自动加上: ?t=20110323
Note
也可以不修改时间戳 tag 而是直接修改 path , 这样的话每次更新都需要新建一个目录包括更新后的全部代码.
静态部署¶
部署时也可以不采用动态加载, 仅仅将 kissy loader 作为代码组织的一种方式, 将所有的模块打包到一个文件静态引入放在页面中, 当使用 KISSY.use 时如果模块已经过静态引入在页面中, 则不会发送请求, 这时建议所有模块的属性都设置为
KISSY.add("custommod",function(){},{attach:false});attach 设置为 false, 表示只有在 use 时才会运行模块定义函数, 消除模块过多而导致的页面初始化时的停滞问题. 若定义模块时不写模块名则默认 attach 为 false .