首页 > 代码库 > seajs笔记

seajs笔记

1、配置

seajs.config({});

比较常用的就是paths、base与alias

seajs.config({  // 别名配置  alias: {    ‘es5-safe‘: ‘gallery/es5-safe/0.9.3/es5-safe‘,    ‘json‘: ‘gallery/json/1.0.2/json‘,    ‘jquery‘: ‘jquery/jquery/1.10.1/jquery‘  },  // 路径配置  paths: {    ‘gallery‘: ‘https://a.alipayobjects.com/gallery‘  },  // Sea.js 的基础路径  base: ‘http://example.com/path/to/base/‘});

一般不要配置 base 路径,把 sea.js 放在合适的路径往往更简单一致。

 

2、加载模块

// 加载一个模块,在加载完成时,执行回调seajs.use(‘./a‘, function(a) {  a.doSomething();});// 加载多个模块,在加载完成时,执行回调seajs.use([‘./a‘, ‘./b‘], function(a, b) {  a.doSomething();  b.doSomething();});

3、定义模块

define(function(require, exports, module) {  // 模块代码});
模块暴露接口的三种方式:
1)define(function(require, exports, module) {  //exports.xxx=});2)define(function(require, exports, module) {  //module.exports=});3)define(function(require, exports, module) {  //return });

define的参数可以直接是一个字符串或者对象,如:

define("hello world");define({"foo":"bar"});define(["foo","bar"]);

这种情况下,暴露的接口就是字符串 对象 数组。

 

4、获取模块接口

require(‘./a‘);

 

5、异步加载模块

  // 异步加载一个模块,在加载完成时,执行回调  require.async(‘./b‘, function(b) {    b.doSomething();  });  // 异步加载多个模块,在加载完成时,执行回调  require.async([‘./c‘, ‘./d‘], function(c, d) {    c.doSomething();    d.doSomething();  });

 

6、路径解析

1. 顶级标识始终相对 base 基础路径解析。
2. 绝对路径和根路径始终相对当前页面解析。
3. require 和 require.async 中的相对路径相对当前模块路径来解析。
4. seajs.use 中的相对路径始终相对当前页面来解析。

seajs中,模块的ID大致可分为三种:

相对标识:"./","../" 开头的,如:"./OtherModule", "../lib/Base"。

顶级标识: 以文件或目录(可以包含:字母、-、_)开头的,如:"app/widget/Select"

普通路径:包括 “绝对路径”、“根路径”,等

一、base 路径解析规则
(第 1 层,本身的路径不依赖于任何设置)
1. 不可使用顶级标识,因为顶级标识就是相对于 base 基础路径来解析的,因此 base 本身只能使用相对标识或根路径等。
2. base 默认路径为 seajs 的目录,其他情况参见seajs官网,如果不是seajs推荐的源码目录结构,尽量手动设置 base 路径。
3. 相对标识:相对于 当前页面 解析。


二、paths 中路径解析规则
(第 1 层,本身的路径不依赖于任何设置)
1. 相对标识:在哪里被引用,相对的解析位置视被引用的地方而定,遵循当地的规则。
2. paths中的字段会被以变量的方式在被使用的地方替换,然后再解析。

 

三、alias 中路径解析规则
(第 2 层,本身的路径可以依赖于paths的设置)
1. alias 的规则类似于 paths,并且 alias 路径也可以使用 paths 中的“变量”
2. 提醒:paths、alias 中尽量使用顶级标识、根路径、绝对路径,不要使用相对标识,因为在不同深度的模块引用时会解析为不同的路径。
3. 相对标识:在哪里被引用,相对的解析位置视被引用的地方而定,遵循当地的规则。


四、seajs.use 路径解析规则
相对标识:相对于 当前页面 解析。

 

五、define 定义模块 ID 解析规则 (1)

(第 3 层,路径可以相对于 alias 或 paths 来设置)
可以使用:相对标识、顶级标识、根路径
推荐使用顶级标识,如果模块的位置不在 base 基础路径内,则使用相对标识或根路径。
相对标识:相对当前页面解析

 

六、模块依赖ID 解析规则 (2)

(第 3 层,路径可以相对于 alias 或 paths 来设置)
相对标识:相对 base 基础路径解析

define("..", ["./app/src/module/Base"],..)


七、模块内 require 其他模块的ID 解析规则 (3)
(第 3 层,路径可以相对于 alias 或 paths 来设置)
相对标识:相对 base 基础路径解析

 

八、总结:
1.paths 和 alias 的设置仅仅相当于一个变量,在哪里使用,就在那里替换为设定的值,然后再解析。
2.尽可能的使用顶级标识。
3.如果不能使用顶级标识,比如目录跨越比较大等,则尽量设置 alias 或 paths 通过一个非相对路径标识定位到一个目录,然后在这个标识下,再定义ID。

 

seajs笔记