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。