sea.js学习笔记

在 CMD 规范中,一个模块就是一个文件

  • define(fatctory)是一个全局函数
  • define接受factory参数,factory可以是一个函数,也可以是一个对象或者字符串。
    • factory为函数时,表示是模块的构造方法,执行该构造方法,可以得到模块向外提供的接口。factory方法在执行时,默认会传递三个参数:require、exports和module:如下

 define(function(require,exports,module){

  //模块代码

});    

      • require是factory的第一个参数
      • require(id)是一个方法,接受模块标识作为唯一参数,用来获取其他模块提供的接口。

define(function(require,exports){

  //获取模块接口

  var a = require('./a');

  //调用模块a的方法

  a.dosometiong();

})

        • require.async(id,callback)----方法用来在模块内部异步加载,并在加载完成后执行指定回调。callback参数可选。

define(function(require,exports,module){

  //异步加载一个模块,在加载完成时,执行回调

  require.async('./b',function(b){

  b.doSomething();

})

  //异步加载多个模块,在加载完成时,执行回调

  require.async(['./c','./b'],function(c,b){

  c.doSomething();

  b.doSomething();

})

注意require 是同步往下执行,require.async 则是异步回调执行。require.async 一般用来加载可延迟异步加载的模块。

        • require.resolve(id)略
      • exports 是一个对象,用来向外提供模块接口。
      • 除了给 exports 对象增加成员,还可以使用 return 直接向外提供接口。(略)
      • modules是一个额对象,上面存储了与当前模块相关联的一些属性和方法。(略)

define(function(require,exports){

//对外提供foo属性

exports.foo = 'bar';

//对外提供doSomgthion方法

exports.doSomething = function(){};

})    

      • 除了给 exports 对象增加成员,还可以使用 return 直接向外提供接口。
  • define也可以接受两个以上参数。字符串id表示模块标识,数组deps是模块依赖。比如

 define('hello',[jquery],funtion(require,exports,module){

  //模块代码

});

   注意:id 和 deps 参数可以省略。省略时,可以通过构建工具自动生成。



模块系统的启动

在 Sea.js 里,要启动模块系统:

<script src="path/to/sea.js"></script>

<script>

seajs.use('./main');

</script>

  • seajs.use用来在页面中加载模块
  • seajs.use(id.callback)--通过use方法,可以在页面中加载任意模块:

//加载模块main,并在记载完成时,执行指定回调

seajs.use('./main',function(main){

  main.init();

});

  • use方法还可以一次加载多个模块:

//并发记载模块a和模块b,并在都加载完成时,执行指定回调

seajs.use(['./a','./b'],function(a,b){

  a.init();

  b.init();

})

  callback 参数可选,省略时,表示无需回调。


  配置文件

  • 配置可以直接写在 html 页面上,也可以独立出来成为一个文件。
// seajs 的简单配置
seajs.config({
  base: "../sea-modules/",
  alias: {
    "jquery": "jquery/jquery/1.10.1/jquery.js"
  }
})
// 加载入口模块
seajs.use("../static/hello/src/main")
 

   独立成一个文件时,一般通过 script 标签在页面中同步引入。

原文地址:https://www.cnblogs.com/limin-cn/p/4071259.html