標籤:c style class blog code java
原文: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 process3 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: {} };