Gary的影响力 2014-01-23
至于教程,官网和别人的博客写的太多了,看的都凌乱了,建议看官网。
要点:
1、SeaJS会根据自身的URI来决定URL base,而SeaJS在加载其他模块的时候会根据这个URL base来计算路径。SeaJS会忽略掉seajs、seajs/x.y.z/seajs这两种目录;
2、在SeaJS中一个文件就是一个模块。define是SeaJS定义的一个全局函数,用来定义一个模块,所有代码都放在define(function(require,exports,module){});函数体里面。
3、require,exports,module 参数。require引入依赖模块,exports提供对外接口,module有几种属性和方法,分别是:
31、module.id(模块id,就是全路径了,一般情况下(没有在 define
中手写 id
参数时),module.id
的值就是 module.uri
,两者完全相同。)
32、module.exports(对外接口,{}格式,exports
仅仅是 module.exports
的一个引用。)
33、module.dependencies(数组,当前模块依赖的模块)
4、
<script src="assets/scripts/seajs/sea.js" id="seajsnode" data-main="application/application"></script> <!-- Or <script src="assets/scripts/seajs/sea.js" id="seajsnode"></script> <script> seajs.use("application/application"); </script> -->
data-main为启动模块。
5、一个空对象,可用来判定当前页面是否有 CMD 模块加载器:
if (typeof define === "function" && define.cmd) {
// 有 Sea.js 等 CMD 模块加载器存在
}
require.async
方法用来在模块内部异步加载模块,require
是同步往下执行,require.async
则是异步回调执行。require.async
一般用来加载可延迟异步加载的模块。require.resolve(id)
使用模块系统内部的路径解析机制来解析并返回模块路径。该函数不会加载模块,只返回解析后的绝对路径。
console.log(require.resolve('./b')); // ==> http://example.com/path/to/b.js
这可以用来获取模块路径,一般用在插件环境或需动态拼接模块路径的场景下。
8、