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

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

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

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

语法树转换非常简单。

2) Simplified CommonJS wrapping

 define(function (require, exports, module) {
var a = require('a'),
b = require('b');
exports.action = function () {};
});

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

 var a = require('a'),
b = require('b'); exports.action = function () {};

3) Normalized

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

 define(['backbone', './util', 'Buffer'], function(Bakcbone, util) {
// other process
return {
data: {}
};
});

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

 var Backbone = require('backbone');
var util = require('./util');
require('Buffer'); module.exports = { data: {} };

最新文章

  1. spring的依赖注入,为什么用接口的实现类而不是父类的继承类?
  2. Window 端口查询
  3. 一个简单xml数据转换为数组的方法
  4. ios更新UI时请尝试使用performSelectorOnMainThread方法
  5. sys.path和os.path
  6. Error:No marked region found along edge. - Found along top edge.
  7. The Java™ Tutorials下载地址
  8. poj 3678 Katu Puzzle(2-sat)
  9. C++内存池
  10. javascript 之继承-15
  11. 《重构》的读书笔记–方法列表
  12. angular学习一框架结构认识
  13. 【 js 工具 】如何使用Git上传本地项目到github?(mac版)
  14. mybatis开发dao的方法——(三)
  15. swift - 画图 - 画矩形,虚线,圆和半圆
  16. (转)支持Multi Range Read索引优化
  17. iOS下微信语音播放之切换听筒和扬声器的方法解决方案
  18. [javascript][翻译]使用javascript添加css rule
  19. Hyperledger中的共识机制
  20. POJ 2677 旅行商问题 双调dp或者费用流

热门文章

  1. 实时错误 '91' :对象变量或with块变量未设置
  2. MySQL主从复制详细部署过程
  3. 浮点与整形在GUI下的相关思考
  4. 织梦dedecms网站六大SEO优化技巧(转帖)
  5. PAT - IO - 螺旋方阵
  6. sql 汉字转首字母拼音
  7. c++内存管理错误记录
  8. 习题二:string数组应用
  9. Hybrid----优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案-备
  10. 构建高可用web站点学习(一)