seajs笔记

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的书写约定:

  1. 正确拼写:factory的第一个参数命名必须是require
  2. 不要重新给require赋值
  3. 使用直接量: 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:当前,=模块对外提供的接口


模块标识

  1. 相对标识以. 开头,只会出现在define的factory里

  2. 顶级标识不以.或者/ 开始,会相对于模块的基础路径(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'
    })
    
  3. seajs.use()的相对路径始终是普通路径


模块的加载启动

使用一个模块



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'
});

你可能感兴趣的:(seajs笔记)