基于seajs的模块化编程
前段时间由于项目需求把seajs加入了项目中,越用越喜欢,感叹玉伯大神这头巨牛的创作能力。kissy也是玉伯大神的作品,就是太强大,有点臃肿,适合大型项目开发。
seajs的github地址:https://github.com/seajs/seajs,想研究的进门右拐。
1.seajs.config
seajs.config({
//设置根目录地址 base:'url', // 设置路径,方便跨目录调用 paths: { 'arale': 'https://a.alipayobjects.com/arale', 'jquery': 'https://a.alipayobjects.com/jquery' }, // 设置别名,方便调用 alias: { 'class': 'arale/class/1.0.0/class', 'jquery': 'jquery/jquery/1.10.1/jquery' } })
2.加载模块:
加载a和b模块后执行回调函数func,seajs.use(['a','b'],func);
3.define
define(id, deps, function(require, exports, module) { // 模块代码 });
id:模块唯一标识,'hello'
deps:模块的依赖,['jquery']
require:引入依赖模块,功能:
(1)require('jquery');
(2)require.resolve(id):返回名为id模块的绝对地址.
(3)require.async(['a','b'],func);异步加载a和b模块后执行回调,和require(id)的区别,前者都会下载下来,后者为按需下载.
exports:向外提供接口,写法:
(1)exports.name;
(2)return {};
(3)module.exprots={};
module:保存着模块相关信息的对象,有:
(1)module.id:模块的唯一标识.
(2)module.uri:模块的绝对路径,当没有指定id时,module.id===module.uri.
(3)module.dependencies:保存着当前模块依赖的数组.
4.路径标识:
(1)以.开头的为相对路径,相对于当前模块路径
(2)不以.开头的为绝对路径,相对于base的值定位
5.默认会末尾自动添加.js后缀,如果不希望自动添加可在末尾加上#,如:a.json#
6.jquery插件兼容seajs:
一般jquery插件都会兼容amd规范的requirejs,这样我们就可以改下代码,比如: