一、概念:SeaJS是一个遵循CommonJS规范的javaScript模块加载框架。
在 Sea.js 中,所有 Javascript 模块都遵循 CMD(Common Module Definition) 模块定义规范。该规范明确了模块的基本书写格式和基本交互规则。
在 CMD 规范中,一个模块就是一个文件。代码的书写格式如下:define(factory);
SeaJS解决了两个问题:
1.JavaScript的模块化
2.按模块加载
SeaJS在开发中的角色:在多人协作开发时,起着后勤人员的作用,协调 文件依赖、命名冲突、按需加载的作用;
二、用法:
1.引入sea.js
2.定义模块--define
3.对外提供接口--export
4.依赖接口--require
5.调用模块--seajs.use
例:
为了让sea.js
内部能快速获取到自身路径,推荐手动加上id
属性
1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>seajs的使用方法</title> 6 <script type="text/javascript" src="sea/sea.js" id="seajs"></script> 7 <script> 8 /* 9 调用模块10 语法: 11 seajs.use(url, callback); 12 参数说明:13 url: 调用模块的地址, url默认根目录是sea.js所有文件夹14 callback: 回调函数15 内部工作原理: 16 填入url后,seajs会异步加载url的文件, 加载完成后执行 callback;17 这样就实现了按模块加载JS,也可以说是按需加载。18 */19 seajs.use('./js/test1.js',function(ex){20 21 //ex就是对外接口export22 ex.tab();23 24 function tab(){25 alert('我是现写的,大家都是tab,但不冲突哦~~');26 }27 28 tab(); //很好的就解决了命名冲突29 30 });31 32 </script>33 </head>34 35 <body>36 </body>37 </html>
目录层级关系如下 :
test1.js 如下:
1 // JavaScript Document 2 /* 3 定义模块 4 语法: 5 define(function (require, exports, module){ //参数写法是固定 6 //your code gose here 7 }); 8 参数说明: 9 require: 依赖的接口10 exports: 对外提供的接口11 module: 12 内部工作原理: 13 1.当调用require方法时,seajs会同步加载url的文件,这样就解决依赖问题了。如果想异步加载就用require.async(url, callback);14 2.exports对象下包含的是对外提供的属性和方法,调用seajs.use时,callback函数的参数就是exports对象15 */16 define(function(require, exports, module){ 17 18 //如果依赖的是一个普通JS文件19 require('./test2.js');20 21 //如果依赖的是一个用define写的JS模块22 var ex = require('./test3.js');23 24 function tab(){25 alert('我是test1模块的一个方法');26 alert('test1' + a);27 alert('test1' + ex.b)28 }29 30 exports.tab = tab;31 32 });
test2.js 如下:
1 // JavaScript Document2 3 var a = '依赖test2了, 我是test2的全局变量';
test3.js 如下:
1 // JavaScript Document2 3 define(function(require,exports,module){ //参数写法是固定4 5 exports.b = '依赖test3了,我是test3模块的局部变量';6 7 });
上面说到了seajs中常用的4个方法,别外请参考管方的seajs常用的7个方法:https://github.com/seajs/seajs/issues/266
新闻热点
疑难解答