前面波及,为落实与Node.js相同形式的模块写法,大牛们举办了许多尽力。

 

可是浏览器环境不同为劳动器端,它的模块出一个HTTP请求过程(而Node.js的模块文件就当本土),这一个请过程多数应用script
tag,script 默认的异步性导致大为难落实和Node.js一模一样的模块格式。

 

Modules/Wrappings 使得实现成为现实。即使同Node.js的模块写法不完全一致,但为爆发很多一般的远在,使得熟识Node.js的程序员发一部分亲切感。

 

但是Node.js终究是劳动器端的JavaScript,没有必要将这么些规则放到浏览器JavaScript环境受到。

 

这时AMD 诞生了,它的全为异步模块定义。从名称及看即通晓其是相符script
tag的。也足以说AMD是特意为浏览器中JavaScript环境设计之正统。它吸取了CommonJS的局部优点,但与此同时未照搬它的格式。起始AMD作为CommonJS的transport
format
 存在,因无法和CommonJS开发者达成一致而独出来。它暴发投机的wiki 和讨论组 。

 

英特尔设计有一个简短之写模块API:

define(id?, dependencies?, factory);

 

其中:

  • id: 模块标识,能够大概。
  • dependencies: 所依赖的模块,可以简简单单。
  • factory: 模块的落实,或者一个JavaScript对象。

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

 

以下是使用Intel格局开发的简单三层构造(基础库/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)

 

细之会发觉,还有雷同种植没有出现,即具有名的模特块

 

4,具名模块

define('index', ['data','base'], function(data, base) {
    // todo
});

 

签有名的模特块多数早晚是不推荐的,一般由打包工具合并三个模块到一个js文件被平时采用。

 

前边提到dependencies元素的逐一及factory一一对应,其实不顶严俊。AMD最先吧摆脱CommonJS的约,开创性的指出了协调之模块风格。但后来同时举办了妥协,兼容了
CommonJS Modules/Wrappings 。即以好这样勾画

 

5,包装模块

define(function(require, exports, module) {
    var base = require('base');
    exports.show = function() {
        // todo with module base
    } 
});

 

不考虑多了同等重合函数外,格式和Node.js是一样的:使用require获取倚重模块,使用exports导出API。

 

除开define外,Intel还保留一个第一字require。require 当规范保留的大局标识符,可以实现啊 module
loader,也足以不实现。

 

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

为时有暴发为数不少库房帮忙Intel规范,即将自己作为一个模块存在,如MooTools 、jQuery 、qwery 、bonzo  甚至还来 firebug 。

 

 

相关:

AMD No Longer A CommonJS
Specification

UMD和ECMAScript模块

相关文章

网站地图xml地图