天天看點

02.ElementUI源碼學習:babel配置

02.ElementUI源碼學習:babel配置

2021-04-15 11:29 

Anduril 

閱讀(0) 

評論(0) 

編輯 

收藏

書接上文,接下來項目将引入babel支援ES6+文法相容。

Babel 是一個工具鍊,主要用于将 ECMAScript 2015+ 版本的代碼轉換為向後相容的 JavaScript 文法,以便能夠運作在目前和舊版本的浏覽器或其他環境中。中文官網

0x00.babel概念

Babel 是一個編譯器(輸入源碼 => 輸出編譯後的代碼)。編譯過程分為三個階段:解析、轉換和列印輸出。

Babel 本身不具有任何轉化功能,它把轉化的功能都分解到一個個plugin 裡面。是以當我們不配置任何插件時,經過 babel 的代碼和輸入是相同的。

插件(Plugins)

插件總共分為兩種:文法插件(Syntax Plugins)和轉譯插件(Transform Plugins)。

  • 轉換插件用于轉換你的代碼。
  • 文法插件隻允許Babel解析(parse)特定類型的文法(而不是轉換)。

轉換插件會自動啟用文法插件。是以,如果你已經使用了相應的轉換插件,則不需要指定文法插件。

具體插件清單,詳見官方文檔。 Plugins

預設(Presets)

presets可以看作一組預先設定的插件清單集合,我們可以不必再當獨地一個一個地去添加我們需要的插件。

配置檔案

babel提供了config的方式,類似于webpack的cli方式以及config方式。官方文檔

babel 7.X 之後,引入了

babel.config.json

(支援.js, .cjs, .mjs等檔案格式);在7.X之前,項目都是基于

.babelrc

(支援.json,.js, .cjs, .mjs等檔案格式)來進行配置。

一般

babel.config.json

會放置在根目錄下,在執行編譯時,babel會首先去尋找

babel.config.json

檔案,以此來作為整個項目的根配置。

babel.config.json 配置示例

{
  "presets": ["@babel/env"],
  "plugins": ["transform-vue-jsx"]
}
           

插件的短名稱

如果插件名稱的字首為 babel-plugin-,你還可以使用它的短名稱:

{
  "plugins": [
    "myPlugin",
    "babel-plugin-myPlugin" // 兩個插件實際是同一個
  ]
}
           

适用于帶有冠名(scope)的插件:

{
  "plugins": [
    "@org/babel-plugin-name",
    "@org/name" // 兩個插件實際是同一個
  ]
}
           

預設的短名稱

如果 preset 名稱的字首為 babel-preset-,你還可以使用它的短名稱:

{
  "presets": [
    "myPreset",
    "babel-preset-myPreset" // equivalent
  ]
}
           

适用于帶有冠名(scope)的 preset:

{
  "presets": [
    "@org/babel-preset-name",
    "@org/name" // equivalent
  ]
}
           

執行順序

  • 插件執行順序在presets之前
  • 插件會按照聲明的插件清單順序順序執行(first to last)
  • preset會按照聲明的清單順序逆序執行(last to first)

參考

https://www.cnblogs.com/rynxiao/p/13665506.html

https://babeljs.io/docs/en/config-files

0x01.babel安裝與配置

安裝所需包(package)

項目中引入bable(babel 7.0 以後的插件與預設以@babel為字首)。

02.ElementUI源碼學習:babel配置

@babel/cli

内置的 CLI 指令行工具,可通過指令行編譯檔案。官方文檔

@babel/core

babel的核心,包含各個核心的API,供babel插件和打包工具使用。官方文檔

@babel/preset-env

是一個常用的預設(Presets), 讓你能使用最新的JavaScript文法, 它會幫你轉換成代碼的目标運作環境支援的文法, 提升你的開發效率并讓打包後的代碼體積更小。相關參考

webpack loader 子產品安裝

02.ElementUI源碼學習:babel配置

JSX文法子產品安裝

JSX文法插件使用

babel-plugin-syntax-jsx

,沒有使用高版本的

@babel/plugin-syntax-jsx

,項目運作中後者會出現

Cannot find module babel-plugin-syntax-jsx

異常。

02.ElementUI源碼學習:babel配置

功能驗證

上述子產品安裝完畢後,在test目錄下,建立一個名為

babel-es6-test.js

的檔案

02.ElementUI源碼學習:babel配置

在指令行視窗輸入以下指令,編譯整個

test

檔案夾并輸出到

lib

(不存在則自動建立)檔案夾中

02.ElementUI源碼學習:babel配置

成功運作後,項目lib目錄下也會建立一個

babel-es6-test.js

的檔案,跟

test

目錄下的檔案是相同的,代碼沒有進行轉換。

Babel 本身不具有任何轉化功能,不配置任何插件時,經過 babel 的代碼和輸入是相同的。

在根目錄下建立

babel.config.json

檔案,配置如下:

02.ElementUI源碼學習:babel配置

再次運作指令,

lib

下輸出檔案代碼已經轉換

02.ElementUI源碼學習:babel配置

項目配置

更新

babel.config.json

配置

02.ElementUI源碼學習:babel配置

webpack.config.js

添加一條關于

babel-loader

的規則:

02.ElementUI源碼學習:babel配置

目錄

examples

新增檔案

JSX.vue

用來測試JSX文法

02.ElementUI源碼學習:babel配置

更新

examples\App.vue

檔案,引入

JSX.vue

元件

02.ElementUI源碼學習:babel配置

運作npm run dev,打開浏覽器,成功解析結果如下

02.ElementUI源碼學習:babel配置

最新目錄結構

02.ElementUI源碼學習:babel配置

0x02.示例代碼

Github Repo

  • 分類 0x02.FrontEnd
  • 标簽 element