首页 > Web开发 > 详细

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

时间:2014-06-05 19:03:15      阅读:479      评论:0      收藏:0      [点我收藏+]

 

 

原文: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

bubuko.com,布布扣
1 define({ 
2     add: function(a, b) { return a + b; }
3 });
bubuko.com,布布扣

 

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

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

 

语法树转换非常简单。

2) Simplified CommonJS wrapping

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

 

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

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

 

3) Normalized

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

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

 

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

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

 

 

AMD 规范以及如何将AMD转变为CommonJS,布布扣,bubuko.com

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

原文:http://www.cnblogs.com/villadora/p/3767401.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!