好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

modular js

modular js

停下来,思考才是进步的本质。

AMD:浏览器中的模块规范

前面 提到,为实现与NodeJS相同方式的模块写法,大牛们做了很多努力。

但由于浏览器环境不同于服务器端,它的模块有一个HTTP请求过程。这个请求过程多数使用script tag,script tag默认的异步性导致很难实现与NodeJS一模一样的模块格式。

Modules/Wrappings  使得实现变为现实。虽然和NodeJS的模块写法不完全一致,但也有很多相似之处,使得熟悉NodeJS的程序员有一些亲切感。

但NodeJS终究是服务器端的JavaScript,没有必要把这些条条框框放到浏览器JavaScript环境中。这时 AMD  诞生了,它的全称为异步模块定义。从名称上看便知它是适合script tag的。也可以说AMD是专门为浏览器中JavaScript环境设计的规范。它吸取了CommonJS的一些优点,但又不照搬它的格式。开始AMD作为CommonJS的 transport format   存在,因无法与CommonJS开发者达成一致而独立存在。它有独立的 wiki  和 讨论组  。

AMD设计出一个简洁的写模块API: define  。

define(id?, dependencies?, factory);

其中:

id: 模块标识,可以省略。 dependencies: 所依赖的模块,可以省略。 factory: 模块的实现,或者一个JavaScript对象。

id遵循CommonJS  Module Identifiers  。dependencies元素的顺序和factory参数一一对应。

 

以下是使用AMD模式开发的简单三层结构(基础库/UI层/应用层):

 

base.js

?

define( function () {

     return {

         mix: function (source, target) {

         }

     };

});

ui.js

?

define([ 'base' ], function (base) {

     return {

         show: function () {

             // todo with module base

         }

     }

});

page.js

?

define([ 'data' , 'ui' ], function (data, ui) {

     // init here

});

data.js

?

define({

     users: [],

     members: []

});

以上同时演示了define的三种用法,

1,定义无依赖的模块(base.js)

2,定义有依赖的模块(ui.js,page.js)

3,定义数据对象模块(data.js)

 

 

细心的会发现,还有一种没有出现,即具名模块

?

define( 'index' , [ 'data' , 'base' ], function (data, base) {

     // todo

});

具名模块多数时候是不推荐的,一般由打包工具合并多个模块到一个js文件中时使用。

 

前面提到dependencies元素的顺序和factory一一对应,其实不太严谨。AMD开始为摆脱CommonJS的束缚,开创性的提出了自己的模块风格。但后来又做了妥协,兼容了 CommonJS  Modules/Wrappings  。即又可以这样写

?

define( function (require, exports, module) {

     var base = require( 'base' );

     exports.show = function () {

         // todo with module base

     }

});

不考虑多了一层函数外,格式和NodeJS还比较象的。使用require获取依赖模块,使用exports导出API。

 

除了define外,AMD还保留一个关键字require。 require   作为规范保留的全局标识符,可以实现为   module loader。也可以不实现。

 

目前,实现AMD的库有 RequireJS  、 curl  、 Dojo  、 bdLoad 、 JSLocalnet  、 Nodules  等。

也有很多库支持AMD规范,即将自己作为一个模块存在,如 MooTools  、 jQuery  、 qwery  、 bonzo   甚至还有  firebug  。

停下来,思考才是进步的本质。

modular js

AMD:浏览器中的模块规范

posted @  2012-03-12 07:59  snandy 阅读(787) |  评论 (1)   编辑

Node.js模块格式在浏览器中的尝试

posted @  2012-03-09 07:30  snandy 阅读(1249) |  评论 (3)   编辑

JavaScript中模块“写法”

posted @  2012-03-08 07:42  snandy 阅读(1403) |  评论 (0)   编辑

拥抱模块化的JavaScript

posted @  2012-03-07 07:27  snandy 阅读(1920) |  评论 (2)   编辑

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于modular js的详细内容...

  阅读:41次