`
zhouyrt
  • 浏览: 1162170 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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)
 
 
细心的会发现,还有一种没有出现,即具名模块
 
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
	} 
});
 
不考虑多了一层函数外,格式和NodeJS还比较象的。使用require获取依赖模块,使用exports导出API。
 
除了define外,AMD还保留一个关键字require。require 作为规范保留的全局标识符,可以实现为 module loader。也可以不实现。
 
目前,实现AMD的库有RequireJScurlDojobdLoadJSLocalnetNodules 等。
也有很多库支持AMD规范,即将自己作为一个模块存在,如MooToolsjQueryqwerybonzo  甚至还有 firebug
 
 
相关:
2
0
分享到:
评论

相关推荐

    JS中的模块规范(CommonJS,AMD,CMD

    ### JS中的模块规范(CommonJS, AMD, CMD) #### 一、CommonJS CommonJS 是一种模块化标准,最初被设计用于服务器端JavaScript环境,特别是针对Node.js这样的平台。CommonJS 的核心理念是允许开发者将代码组织成独立...

    模块编程AMD规范

    AMD(Asynchronous Module Definition)规范就是一种处理模块化编程的方法,尤其在浏览器环境中广泛应用。RequireJS是实现AMD规范的一个著名库,它使得在浏览器端进行模块化加载变得可能。 AMD规范主要解决的是...

    符合AMD规范的简单模块化加载工具

    AMD规范由RequireJS提出并广泛推广,旨在解决JavaScript在浏览器环境中由于脚本加载顺序问题导致的依赖关系难题。 在JavaScript开发中,包管理器扮演着重要的角色。它们帮助我们组织代码,管理依赖,以及自动化构建...

    JS中的模块规范(CommonJS,AMD,CMD(少用))

    ### JS中的模块规范详解 #### 一、CommonJS **CommonJS** 是为了解决JavaScript在实际应用中缺乏模块化支持的问题而诞生的一种规范。它最初是为了让JavaScript能够在服务器端运行,尤其是为了适应Node.js这样的...

    Javascript模块化编程(二)AMD规范共3页.pd

    6. **AMD与CommonJS的区别**:与CommonJS(Node.js中使用的模块系统)相比,AMD更适合浏览器环境,因为它支持异步加载,而CommonJS则适用于服务器端,其模块加载是同步的。 7. **工具支持**:RequireJS是实现AMD...

    ESL浏览器端的模块加载器支持延迟定义和AMD

    AMD是JavaScript模块化的一种设计模式,它解决了在浏览器环境中并行加载多个模块的问题。AMD允许模块和它们的依赖关系同时加载,而不是等待一个模块完全加载后再加载下一个。这在处理多个脚本文件时非常有效,尤其是...

    Javascript模块化编程(一)AMD规范(规范使用模块)

    然而,随着技术的发展,目前ES6模块规范(ES Modules)已经被ECMAScript官方标准化,并得到了现代浏览器的广泛支持。ES Modules提供了更现代化的模块导入导出语法,它将逐渐成为主流的JavaScript模块化解决方案。

    浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结.docx

    本文将重点介绍三种主流的JavaScript模块化规范:CommonJS、AMD(Asynchronous Module Definition)以及CMD(Common Module Definition),并通过对比分析它们的特点和应用场景。 #### 二、为何而生 这三个规范都...

    Javascript模块化编程(三):模块化编程实战,试用SeaJS

    2. CommonJS 规范: CommonJS 是服务器端JavaScript模块化的一个标准,允许开发者通过`require()`函数引入模块,并通过`module.exports`或`exports`导出模块。SeaJS虽然在浏览器环境中使用,但其设计思路和API很大...

    NodeJS模块与ES6模块系统语法及注意点详解

    社区模块规范: 1.CommonJS规范 规范实现者: NodeJS 服务端 Browserify 浏览器 2.AMD规范 全称 异步模块定义 规范实现者: RequireJS 浏览器 3.CMD规范 通用模块定义 规范实现者: seaJS 服务端和浏览器通用...

    JTaroModule遵循ES6模块规范的前端模块管理工具

    这种方式相比CommonJS或AMD等早期模块规范,更符合静态类型语言的设计理念,可以进行静态分析,从而提高编译时优化的可能性。 **二、JTaroModule的核心功能** 1. **模块加载**:JTaroModule能自动扫描并加载项目中...

    AMD 模块定义规范

    异步模块定义(AMD)的编程接口提供了定义模块,及异步加载该模块的依赖的机制。它非常适合于使用于浏览器环境,浏览器的同步加载模块机制会带来性能,可用性,调试和跨域访问的问题。

    OYE AMD模块化开发部署实践 共18页.ppt

    1. **模块化开发**:OYE遵循AMD规范,允许开发者创建和组织模块化的JavaScript代码。 2. **插件支持**:OYE支持自定义插件,扩展其功能以适应不同的应用场景。 3. **构建工具**:OYE Builder提供了一整套构建流程,...

    JavaScript模块规范之AMD规范和CMD规范

    在实际应用中,开发者可以根据项目需求和团队习惯选择合适的模块规范,同时也可以考虑使用Browserify、Webpack等现代前端打包工具,这些工具提供了将CommonJS、AMD、CMD等多种模块规范转换为浏览器兼容的代码的能力...

    __babel-bug-dollar-amd:带$和amd模块插件的Babel错误示例

    AMD(Asynchronous Module Definition)是一种常见的模块加载规范,它允许异步加载模块,特别适用于浏览器环境。Babel则是一个广泛使用的JavaScript编译器,它能将ES6+的新特性转换为广泛支持的JavaScript版本,以便...

    Javascript模块化编程

    - **CommonJS**和**AMD**是两种主要的JavaScript模块规范,分别适用于服务器端和浏览器端。 - **异步加载**(如AMD规范所支持的)对于优化浏览器端的应用体验非常重要。 - **库支持**:通过使用如Require.js这样的库...

    AMD_DEMO.zip

    AMD,即Asynchronous Module Definition(异步模块定义),是一种JavaScript模块化开发的规范,它允许在浏览器环境中异步加载和管理模块。AMD规范主要由RequireJS提出并推广,旨在解决JavaScript代码的组织、依赖...

    lodash-amd:Lodash,命名为amd form

    异步模块定义(AMD)是一种在浏览器环境中实现模块化的技术,它允许我们并行加载和执行脚本,提高了网页的加载速度。AMD 的核心思想是将每个模块定义为一个独立的函数,该函数接收两个参数:`require` 和 `define`。...

Global site tag (gtag.js) - Google Analytics