AMD 规范以及如何将AMD转变为CommonJS

原文:http://villadora.me/2014/05/23/amd-define-and-how-to-translate-amd-to-commonjs/

CommonJS和AMD的争论已经有很多,而两者也在项目进化和融合。个人看来CommonJS更面向于开发者,对于开发者来说,需要的是清晰的版本和管理,更少的代码和干扰,更少的配置。而AMD在代码中允许匿名模块,模块名称和变量之间关系的不清晰,非就近依赖,冗余依赖定义都不是开发者友好。

require2commonjs 提供了命令行和node模块来将在requirejs中使用的AMD转化为CommonJS格式,方便其他使用CMD或者
node, cortex 等外部系统来使用。

目前的官方AMD提供一下几种方式去定义一个模块:

1) Dependency-free module, simple object


1 define({
2 add: function(a, b) { return a + b; }
3 });

没有任何依赖,直接定义模块的exports。这种情况下要将AMD转话为CommonJS模块,只需要变为


1 module.exports = {
2 add: function(a, b) { return a + b; }
3 };

语法树转换非常简单。

2) Simplified CommonJS wrapping


1 define(function (require, exports, module) {
2 var a = require(‘a‘),
3 b = require(‘b‘);
4 exports.action = function () {};
5 });

现在AMD提供CommonJS wrapping这种格式,更为简单。 只需要将factory函数中的函数体提取出来就可以了


1 var a = require(‘a‘),
2 b = require(‘b‘);
3
4 exports.action = function () {};

3) Normalized

这个是通常我们见到的AMD格式


1 define([‘backbone‘, ‘./util‘, ‘Buffer‘], function(Bakcbone, util) {
2 // other process
3 return {
4 data: {}
5 };
6 });

对于这种格式,处理有两个步骤 1) 将依赖转变为require的形式,中间要注意的是依赖申明和 factory 的参数并不一定一致; 2) 将
return 转变为 module.exports


1 var Backbone = require(‘backbone‘);
2 var util = require(‘./util‘);
3 require(‘Buffer‘);
4
5 module.exports = { data: {} };

AMD 规范以及如何将AMD转变为CommonJS

时间: 2024-08-03 19:23:07

AMD 规范以及如何将AMD转变为CommonJS的相关文章

AMD规范学习笔记

背景 NodeJS的一套比较简洁 Moudles 规范, 使得在服务器端的模块化变得更加简单.很长一段时间,很多公司或者项目都有自己的一套模块化机制, 却未能形成一套统一的标准, NodeJS的Moudles规范如果运用在浏览器端会存在一些问题,如 服务器端JS模块文件就在本地,浏览器端则需要通过网络请求 服务器端可以很容易的实现同步或异步请求模块,浏览器端代价会比较大 采用XHR的方式实现同步请求模块,存在明显的跨域缺陷,而使用script的方式,默认是异步的. 在这样的背景下, Common

Javascript模块化编程(二):AMD规范

作者: 阮一峰 日期: 2012年10月30日 这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块. 但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写法,岂不是乱了套!考虑到Javascript模块现在还没有官方规范,这一点就更重要了. 目前,通行的Javascript模块规范共有两种

require.js的AMD规范详解

require.js使用简介 在web刚开始发展的蛮荒时代,一个页面中只需要加载一个或少量的js文件,不存在模块,也不存在冲突之类的问题,但随着web项目的发展,它越来越大,js文件动辄几十个,怎么加载就成为了一个问题,要为浏览器的性能考虑,还有各个js文件(模块)的依赖关系.require.js的出现就是为了解决这样的问题. 1.实现js文件的异步加载,避免网页失去响应. 2.管理模块之间的依赖性,便于代码的编写和维护. require.js加载 使用require.js的第一步,是先去官方网

Javascript模块化开发 – AMD规范

通行的Javascript模块规范共有两种:CommonJS和AMD. 2009年,美国程序员Ryan Dahl创造了node.js项目,将javascript语言用于服务器端编程.这标志"Javascript模块化编程"正式诞生.因为老实说,在浏览器环境下,没有模块也不是特别大的问题,毕竟网页程序的复杂性有限:但是在服务器端,一定要有模块,与操作系统和其他应用程序互动,否则根本没法编程. node.js的模块系统,就是参照CommonJS规范实现的.在CommonJS中,有一个全局性

JavaSript模块规范 - AMD规范与CMD规范介绍

JavaSript模块化 在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发? 模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解以之处理.模块化是一种处理复杂系统分解为代码结构更合理,可维护性更高的可管理的模块的方式.可以想象一个巨大的系统代码,被整合优化分割成逻辑性很强的模块时,对于软件是一种何等意义的存在.对于软件行业来说:解耦软件系统的复杂性,使得不管多么大的系统,也可以将管理,开发,维护变得"有理可循".

amd规范

http://www.cnblogs.com/snandy/archive/2012/03/12/2390782.html AMD设计出一个简洁的写模块API: define(id?, dependencies?, factory); 其中: id: 模块标识,可以省略. dependencies: 所依赖的模块,可以省略. factory: 模块的实现,或者一个JavaScript对象. id遵循CommonJS Module Identifiers .dependencies元素的顺序和fa

AMD规范与CMD规范的区别是什么?

AMD规范与CMD规范的区别是什么?    在比较之前,我们得先来了解下什么是AMD规范?什么是CMD规范?当然先申明一下,我个人也是总结下而已,也是网上看到的资料,自己总结下或者可以说整理下而已,供大家更深入的了解!因为我们都知道 AMD规范:是 RequireJS 在推广过程中对模块定义的规范化产出的,而CMD规范:是SeaJS 在推广过程中对模块定义的规范化产出的. 什么是CMD规范?  在CMD中 一个模块就是一个文件,如下代码所示: //基本格式如:define(id, deps, f

Javascript模块化编程(二):AMD规范(转)

这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块. 但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写法,岂不是乱了套!考虑到Javascript模块现在还没有官方规范,这一点就更重要了. 目前,通行的Javascript模块规范共有两种:CommonJS和AMD.我主要介绍AMD,但

使用requireJS加载不符合AMD规范的js文件:shim的使用方式和实现原理

我们知道在javascript中定义全局变量有2种方式,本质上是等价的,都是向window对象注入属性或者方法. // global.js var g_name = "aty"; window.g_age = 25; 当global.js加载的时候,浏览器的全局对象window就会多出2个属性:g_name和g_age. 我们编写一个js工具类或者是js框架,通常有2种方式: 方式1:dateUtil.js (function(window) { var DateUtils = {};