詳解如何用babel轉換es6的class語法-創(chuàng)新互聯(lián)

babel是一個轉碼器,目前開發(fā)react、vue項目都要使用到它。它可以把es6+的語法轉換為es5,也可以轉換JSX等語法。

成都創(chuàng)新互聯(lián)公司成立與2013年,先為赤城等服務建站,赤城等地企業(yè),進行企業(yè)商務咨詢服務。為赤城企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

我們在項目中都是通過配置插件和預設(多個插件的集合)來轉換特定代碼,例如env、stage-0等。

實際上babel可以通過自定義插件的方式實現(xiàn)任何代碼的轉換,接下來我們通過一個“把es6的 class 轉換為es5”的例子來了解一下babel。

內容如下:

webpack環(huán)境配置

大家應該都配置過babel-core這個loader,它的作用是提供babel的核心Api,實際上我們的代碼轉換都是通過插件來實現(xiàn)的。

接下來我們不用第三方的插件,自己實現(xiàn)一個es6類轉換插件。先執(zhí)行以下幾步初始化一個項目:

  1. npm install webpack webpack-cli babel-core -D
  2. 新建一個webpack.config.js
  3. 配置webpack.config.js

如果我們的插件名字想叫transform-class,需要在webpack配置中做如下配置:

詳解如何用babel轉換es6的class語法

接下來我們在node_modules中新建一個babel-plugin-transform-class的文件夾來寫插件的邏輯(如果是真實項目,你需要編寫這個插件并發(fā)布到npm倉庫),如下圖:

詳解如何用babel轉換es6的class語法

紅色區(qū)域是我新建的文件夾,它上面的是一個標準的插件的項目結構,為了方便我只寫了核心的index.js文件。

如何編寫bable插件

babel插件其實是通過AST(抽象語法樹)實現(xiàn)的。

babel幫助我們把js代碼轉換為AST,然后允許我們修改,最后再把它轉換成js代碼。

那么就涉及到兩個問題:js代碼和AST之間的映射關系是什么?如何替換或者新增AST?

好,先介紹一個工具:astexplorer.net:

這個工具可以把一段代碼轉換為AST:

詳解如何用babel轉換es6的class語法

如圖,我們寫了一個es6的類,然后網頁的右邊幫我們生成了一個AST,其實就是把每一行代碼變成了一個對象,這樣我們就實現(xiàn)了一個映射。

再介紹一個文檔: babel-types :

這是創(chuàng)建AST節(jié)點的api文檔。

比如,我們想創(chuàng)建一個類,先到astexplorer.net中轉換,發(fā)現(xiàn)類對應的AST類型是 ClassDeclaration 。好,我們去文檔中搜索,發(fā)現(xiàn)調用下面的api就可以了:

詳解如何用babel轉換es6的class語法

創(chuàng)建其他語句也是一樣的道理,有了上面這兩個東西,我們可以做任何轉換了。

下面我們開始真正編寫一個插件,分為以下幾步:

  1. 在index.js中export一個函數(shù)
  2. 函數(shù)中返回一個對象,對象有一個visitor參數(shù)(必須叫visitor)
  3. 通過astexplorer.net查詢出 class 對應的AST節(jié)點為 ClassDeclaration
  4. 在vistor中設置一個捕獲函數(shù) ClassDeclaration ,意思是我要捕獲js代碼中所有 ClassDeclaration 節(jié)點
  5. 編寫邏輯代碼,完成轉換
module.exports = function ({ types: t }) {
 return {
  visitor: {
   ClassDeclaration(path) {
    //在這里完成轉換
   }
  }
 };
}

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

當前名稱:詳解如何用babel轉換es6的class語法-創(chuàng)新互聯(lián)
轉載來源:http://muchs.cn/article10/cdjsgo.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供定制網站小程序開發(fā)、企業(yè)網站制作、全網營銷推廣定制開發(fā)、網站內鏈

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網站建設