模块化开发,SesJS简单总结

一、概念:
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就是对外接口export
22     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 Document
2 
3 var a = '依赖test2了, 我是test2的全局变量';

 

test3.js 如下:

1 // JavaScript Document
2 
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

posted @ 2014-07-04 16:16  恒-Ivan  阅读(1027)  评论(0编辑  收藏  举报