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()的相对路径始终是普通路径


模块的加载启动

使用一个模块

<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'
});
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js...
    半世韶华忆阑珊阅读 675评论 0 0
  • 为什么要使用模块化? 最主要的目的:解决命名冲突依赖管理 其他价值提高代码可读性代码解耦,提高复用性 CMD、AM...
    Eazer阅读 704评论 3 1
  • 随着前端业务复杂度的增加,模块化成为一个大的趋势。而在ES6还未被浏览器所支持的情况下,commonjs作为ES6...
    吴高亮阅读 1,066评论 0 3
  • 1 个人理解;有错希望大家指出;稍后更新拖拽上传文件; 2、commonJS commonjs的目标是制定一个js...
    吴高亮阅读 1,588评论 0 2
  • ArraySlice 的内存结构 基本操作 设计一个去重的Array函数 检查CopyOnWrite 高阶函数
    小万叔叔阅读 241评论 0 0