Babel是一個轉換編譯器,它能將 ES6 轉換成能夠在瀏覽器中運行的代碼。Babel 由來自澳大利亞的開發者Sebastian McKenzie建立。他的目標是使 Babel 能夠處理 ES6 的全部新語法,併爲它內置了React JSX 擴展及Flow類型註解支持。php
據codemix創始人Charles Pick介紹,Babel 是全部 ES6 轉換編譯器中與 ES6 規範兼容度最高的,甚至超過了谷歌建立已久的Traceur編譯器。Babel 容許開發者使用 ES6 的全部新特性,並且不會影響與老版本瀏覽器的兼容性。此外,它還支持許多不一樣的構建 & 測試系統,使開發者很容易將它集成到本身的工具鏈中。node
Charles 認爲,Babel 從根本上講是一個平臺,這是它與 compile-to-JS 語言CoffeeScript和TypeScript最大的不一樣。Babel 的插件系統容許開發者自定義代碼轉換器並插入到編譯過程。這些轉換器會接收一棵抽象語法樹,並在代碼轉換成可執行的 JavaScript 以前對其進行操做。codemix 已經嘗試開發了靜態 & 運行時類型檢查、閉包消除、JavaScript「健康宏(hygienic macros)」等插件。react
Babel 不只跟蹤 ES6 的進展狀況,並且仍是 ES7 或 ES2016 的試驗場。好比,它已經支持async/await,使開發者更容易編寫異步 JavaScript 代碼,並且與使用回調或 Promises 相比,代碼更簡潔易懂。雖然主流瀏覽器可能還須要幾年的時間才能支持這種異步 JavaScript 代碼編寫方式,但 Babel 使開發者如今就能夠用上它。這得益於 Babel 與 JavaScript 技術委員會(TC39)保持着高度一致,可以在 ECMAScript 新特性標準化以前爲開發者提供現實世界可用的實現。而同時,這也有利於 JavaScript 的進一步發展,由於其團隊能夠在 ECMAScript 規範最後定稿前就得到來自現實世界的反饋。git
Babel 還能提高 JavaScript 的執行速度。因爲 JavaScript 文件加載和執行速度慢會嚴重影響用戶體驗,因此 JIT 沒有時間在運行時執行全部技術上可行的優化。相比之下,Babel 是在編譯時運行,沒有這麼嚴格的時間限制。藉助強大的做用域跟蹤和類型推斷功能及插件系統,開發者能夠構建轉換器來執行此類優化,好比上文提到的閉包消除能夠將閉包轉換成日常的函數。Babel 自己也內置了一些優化,好比經過utility.deadCodeElimination
轉換器執行常量合併 / 常量傳播。在接下來的幾個月裏,咱們還有望看到以下插件:es6
codemix 後續將發佈多個執行此類優化的插件,感興趣的讀者能夠聯繫他們或者關注其Twitter。關於 JavaScript 引擎能夠作哪些不一樣的優化,能夠查看這裏。github
Babel 插件並侷限於性能提高,好比,還能夠作下面這些事情:typescript
上述插件,有一部分已經實現。npm
總之,Charles 認爲,Babel 是一款優秀的軟件,必將成爲每一個 Web 開發者工具箱的一部分,而做爲 ECMAScript 的試驗場,它在不遠的未來極可能會成爲推進 ES6 和 ESNext 應用和發展的主要動力。瀏覽器
轉自:https://www.infoq.cn/article/2015%2F05%2FES6-TypeScriptbabel