CMD模块定义规范
define(factory);
define用来定义模块,接受factory参数,factory可以是一个函数(表示模块的构造方法),也可以是一个对象或者是字符串(此时模块的接口就是该对象或者字符串).
define(function(require,exports,module){
//模块代码
})
也可以是这样define(id?(模块标识),deps?(模块依赖数组形式),factory)
define('test',['jQuery'],function(require,exports,module){
//模块代码
})
require是一个方法,用来获取其他模块提供的接口.
var a = require('./a');//获取模块a的接口
a.doSomething(); //调用模块的方法
require的书写约定:
- 正确拼写:factory的第一个参数命名必须是require
- 不要重新给require赋值
- 使用直接量:
require('my-module')
,不要使用变量
异步加载模块require.async(id,callback)
,当要加载多个模块时,id可以变为数组
exports是一个对象,用来向外提供模块接口
difine(function(require,exports){
exports.foo = 'bar'; //对外提供foo属性
exports.doSomething = function(){}
});
也可以不用exports,直接使用return向外提供
module string:是模块的唯一标识,define的第一个参数id即为模块的标识
module.uri:模块的绝对路径
module.exports:当前,=模块对外提供的接口
模块标识
相对标识以
.
开头,只会出现在define的factory里-
顶级标识不以
.
或者/
开始,会相对于模块的基础路径(base)来解析当 sea.js 的访问路径中含有版本号时,base 不会包含 seajs/x.y.z 字串。 当 sea.js 有多个版本时,这样会很方便。 如果 sea.js 的路径是: http://example.com/assets/seajs/1.0.0/sea.js 则 base 路径是: http://example.com/assets/ 手动配置base seajs.config({ base:'address' })
seajs.use()的相对路径始终是普通路径
模块的加载启动
使用一个模块
<script src="path/to/sea.js"></script>
<script>
seajs.use('./main');
</script>
seajs.use:用来在页面中加载模块,通过use方法,可以在页面中加载任意的模块
//加载完成时执行回调
seajs.use('./main',function(){
main.init();
})
配置
seajs.config
seajs.config({
//别名配置,当模块标识很长时,可以使用alias来简化
alias:{
'jquery':'jquery/jquery/1.1.0/jquery'
},
//路径配置,当目录比较深时
path:{
'gallery': 'https://a.alipayobjects.com/gallery',
'app': 'path/to/app'
},
//变量配置
vars:{
'locale':'zh-cn'
},
//使用在:var lang = require('./i18n/{locale}.js'); vars配置的是模块标识的变量值,在标识中用{key}标识变量
//映射配置
map:{
},
//预加载,配置等到use时加载
preload:[
Function.prototype.bind ? '' : 'es5-safe',
this.JSON ? '' : 'json'
],
//基础路径
base:'',
//文件编码
charset:'utf-8'
});