Babel 簡介

本教程咱們學習 Babel 的基礎知識,Babel 是一個用於 web 開發,且自由開源的 JavaScript 編譯器、轉換器。主要用於在當前和較舊的瀏覽器或環境中將 ECMAScript 2015+ 代碼轉換爲 JavaScript 的向後兼容版本。react

Babel 使軟件開發者可以以偏好的編程語言或風格來寫做源代碼,並將其利用 Babel 翻譯成 JavaScript,是現今在瀏覽器最經常使用的編程語言。web

下列是 Babel 的使用場景:typescript

  • 語法轉換。
  • 目標環境中缺乏的 Polyfill 功能。
  • 源代碼轉換(codemods)
示例:

例如將 ES2015 中的箭頭函數編譯成 ES5編程

[1, 2, 3].map((n) => n + 1);

編譯後的 ES5 代碼以下所示:瀏覽器

[1, 2, 3].map(function (n) {
  return n + 1;
});

這兩段代碼的功能是同樣的,可是由於 ES2015ES5 的語法有所不一樣,因此編譯後的代碼也不一樣。編程語言

Babel運行方式和插件

Babel 的編譯總共分爲三個階段:解析(parsing),轉換(transformation),生成(generate)。函數

Babel 自己不具備任何轉化功能,Babel 的轉換功能都是經過插件(plugin)來實現的,把轉化的功能都分解到一個個插件裏面。所以當咱們不配置任何插件時,通過 Babel 的代碼和輸入是相同的。學習

插件總共分爲兩種:插件

  • 語法插件:當咱們添加語法插件以後,在解析這一步就使得 Babel 可以解析更多的語法。
  • 轉譯插件:而添加轉譯插件以後,在轉換這一步把源碼轉換並輸出。這也是咱們使用 Babel 最本質的需求。

同一類語法可能同時存在語法插件版本和轉譯插件版本。若是咱們使用了轉譯插件,就不用再使用語法插件了。翻譯

preset

preset 預約義的一系列插件的組合,用於將特定的語法轉換爲當前環境使用的語法,避免了本身單獨去挑選插件。

preset 分爲如下幾種:

  • 官方內容,目前包括 envreactflowminifytypescript 等。
  • stage-x,這裏麪包含的都是當年最新規範的草案,每一年更新。能夠細分爲:
    • Stage 0:設想(Strawman):只是一個想法,可能有 Babel插件。
    • Stage 1:建議(Proposal):這是值得跟進的。
    • Stage 2: 草案(Draft):初始規範。
    • Stage 3: 候選(Candidate):完成規範並在瀏覽器上初步實現。
    • Stage 4:完成(Finished):將添加到下一個年度版本發佈中。
相關文章
相關標籤/搜索