Babel 7支持ES.Next提案和TypeScript

Babel 7帶來了很多重大變更和改進,包括對TypeScript轉換的支持以及更好的用於管理ES.Next提案的方法。

Babel和TypeScript團隊合作,讓Babel可以用@babel/preset-typescript解析和轉換類型語法。Babel已經可以支持Flow,Babel團隊的目標是爲一些工具提供支持,這些工具可以讓JavaScript用戶利用漸進類型。TypeScript項目經理Daniel Rosenwasser解釋了Babel和TypeScript團隊協作的動機和好處:

雖然TypeScript編譯器仍然是構建TypeScript的首選方法,Babel可以處理編譯和轉換,但Babel沒有提供內置的類型檢查。這種集成可以讓Babel用戶利用TypeScript的拼寫和錯誤檢查優勢。

定義JavaScript年度更新的工作組TC39創建了很多提案供參考。Babel 7更改了默認行爲,要求用戶明確選擇加入版本4之前的任何特性,以防止用戶無意中依賴尚未最終確定的特性。

Babel支持的TC39提案的完整列表可在babel/proposal中找到。

使用Babel進行配置的重大改進是在版本7中完成的,包括引入babel.config.js。這個新的配置文件是可選的,並不完全是作爲.babelrc的替代,但在某些情況下,例如對於開發和生產環境的不同編譯選項,預計會派上用場。

根據Babel維護者Henry Zhu所述:

需要注意的是,babel.config.js的配置方案與.babelrc是不一樣的。新的配置文件總是從文件中解析配置,而.babelrc將查找每個文件,直到找到配置。這種方式可以利用選擇性配置,並進行配置覆蓋。

發佈ES2015+軟件包以及使用和編譯這些軟件包具有一定的挑戰。Babel現在允許應用程序爲測試、客戶端源代碼和服務器端代碼提供不同的編譯配置,不再需要爲每個目錄創建新的.babelrc文件。

Babel 7還爲缺乏Promises和Symbols等功能的環境提供實驗性的自動ployfill支持。Babel 7不會導入整個polyfill,而是隻導入代碼庫中使用的polyfill。

Babel 7增加了更好的模塊定位、用於Babel轉換的調用者元數據、JSX支持、babel-upgrade工具等等。

在升級到Babel 7時需要注意幾個重大變化:

  • 移除對Node.js 6之前版本的支持;
  • 使用帶有作用域的@babel命名空間,以防止與官方Babel包混淆;
  • 移除年度預設,替換爲@babel/preset-env;
  • 使用選擇性TC39個別提案替換階段提案;
  • TC39提議插件現在是-proposal,而不是-transform;
  • 爲某些面向用戶的包(例如babel-loader、@babel/cli等)在@babel/core中引入peerDependency。

在展望Babel 7之後的未來時,Zhu說:

例如,Babel團隊一直致力於支持修訂後的裝飾器提案,該提案將包含在7.1版本中。修訂後的提案與之前的提案有很大不同,增加了更多特性。TypeScript路線圖也包括了實現修訂後的ES裝飾器提案的計劃。

其他正在開發中的新Babel功能包括minify、插件順序、更好的驗證/錯誤、異步使用Babel,等等。有關詳細信息,請參閱Babel路線圖

Babel基於MIT開源許可。歡迎開發者通過Babel GitHub組織參與貢獻,並遵守Babel的貢獻指南行爲準則。也可以通過Open Collective進行捐款來支持該項目。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章