目前dojo-amd-coverter項目處於alpha版本階段,它是一個協助使用者實現dojo代碼版本升級的工具軟體。AMD模式比傳統的dojo模組文法具有更多的優勢,但是為了能夠充分發揮dojo的AMD特性優勢,開發人員經常面臨升級和重構大量舊版本的dojo原代碼來支援AMD新特性,例如從dojo.provide/dojo.require文法遷移到AMD模式下的define和require方法。我們在項目中講傳統的dojo方式升級到AMD模式,來利用這些最新版本的API特性,那麼能夠提供一套專門的轉化工具包(dojo-amd-converter),這些工作在Dojo 2.0版本的早期的背景下,具有非常重要的作用。值得注意的是,這個工具只能夠覆蓋人工轉化過程的70%-80%,並且一般情況優於標準的dojo使用方法。通常我們需要等待更多的時間才宣布我們的項目,但是在早期的aplph狀態這應該是有用的。我們知道這個工具有相當多的開放性問題需要進行修改,我們也邀請您一起來協助改進該項目。我們希望這種目前看來能夠協助將pre-AMD的代碼轉換為AMD代買的工具可以在整個社區的功能努力的下,成為一個代碼遷移的基礎工具,更加方便的從Dojo 1.x版本遷移到Dojo2.x。這項工作尚未開始,因為Dojo 2.0現在還沒有付諸實施。它是如何做到這一點的?基於一個規則的集合,利用Node.js, libxml.js和esprima,解析器將使得現有的Dojo的源碼樹轉化為以下內容1.non-AMD模組到AMD模組2.名字空間引用到模組引用3.傳統的HTML自訂屬性到HTML5相容的data-dojo-*4.傳統的i18n bundles到AMD bundles5.舊版本的dojo API到改進後相應的替代版本例如,在轉化之前你的dojo原始碼如下:
dojo.provide("my.namespace.i18n.Bundle");dojo.requireLocalization("dijit", "common");dojo.requireLocalization("foo.package", "Bundle");dojo.requireLocalization("bar.package", "Bundle2"); var foo = dojo.i18n.getLocalization("foo.package", "Bundle"), bar = dojo.i18n.getLocalization("bar.package", "Bundle2", foo.bar), baz = { locale: "en-lol", i18n: dojo.i18n.getLocalization("bar.package", "Bundle2", this.locale) };轉化之後,如下define([ "dojo", "dojo/i18n", "dojo/i18n!bar/package/nls/Bundle2", "dojo/i18n!dijit/nls/common", "dojo/i18n!foo/package/nls/Bundle"], function (dojo, i18n, i18nBundle2, i18ncommon, i18nBundle) { var foo = i18nBundle, bar = i18n.getLocalization("bar.package", "Bundle2", foo.bar), baz = { locale: "en-lol", i18n: i18n.getLocalization("bar.package", "Bundle2", this.locale) };});使用方法使用dojo-amd-converter工具,在Mac和Linux平台,可以參考一下步驟:1. 通過Git下載原始碼git clone --recursive https://github.com/SitePen/dojo-amd-converter.git2. 更改提供的config.js檔案,指明你的項目的一些基本的設定內容,如項目的源路徑和目標路徑3. 在項目倉庫的目錄下,運行提供的shell指令碼,指定剛才設定的設定檔./parse.sh config.js如果收到一個拒絕許可權的錯誤,你需要利用chmod更改這個shell指令碼:chmod +x parse.shconfig.js的配置選項1. exludePaths - 一個路徑數組參數,包含所有排除在處理之外的路徑列表。每個路徑應該是一個Regex2. srcDir - 待處理的檔案的根目錄3. distDir - 處理後檔案的輸出目錄4. printOutput - 列印輸出內容而不是把他發送到輸出目錄中5. makeDeclareAnonymous - 使得declare函數調用匿名而不是留下的第一個參數是匿名。這將避免declare函數建立任何的全域變數6. removeUnusedDependencies - 刪除轉換後未引用到的任何依賴關係7. onlyProcessTemplates - 僅處理template目錄下的HTML檔案AMD convert工具軟體目前無法運行在windows平台上,是因為他依賴於libxmljs包。參與方式這個項目仍處於早期階段,我們希望它能夠被用在向Dojo 2.0的轉換工作中。儘管我們目前有許多開放性的問題,但是我們已經明確在我們的項目中使用該工具。dojo-amd-converter這個工具與其他Dojo基金會項目按相同的條款及條件的授權方式相同。