Babel全家桶簡介

前言

配置webpack的時候發(fā)現(xiàn)一堆babel相關(guān)的組件,在此將所查獲的資料整理一下,方便之后查閱。

1. babel-cli

babel命令行工具

// 通過命令行轉(zhuǎn)換js代碼
$ babel example.js

2. babel-node

用法同node命令,運行時提供es6運行環(huán)境

$ babel-node
> (x => x * 2)(1)
2

$ babel-node es6.js
2

3. babel-register

babel-register模塊改寫require命令,為它加上一個鉤子。此后,每當(dāng)使用require加載.js、.jsx、.es和.es6后綴名的文件,就會先用Babel進行轉(zhuǎn)碼??梢哉f是為了兼容conmonjs的代碼。

# 使用時,必須首先加載babel-register
require("babel-register");
require("./index.js");

4. babel-core

如果某些代碼需要調(diào)用 Babel 的 API 進行轉(zhuǎn)碼,就要使用babel-core模塊。
就是提供一種方式,可以用編碼的方式轉(zhuǎn)換es6代碼。

var babel = require('babel-core');

// 字符串轉(zhuǎn)碼
babel.transform('code();', options);

5. babel-polyfill

Babel 默認只轉(zhuǎn)換新的 JavaScript 句法(syntax),而不轉(zhuǎn)換新的 API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局對象,以及一些定義在全局對象上的方法(比如Object.assign)都不會轉(zhuǎn)碼。

舉例來說,ES6 在Array對象上新增了Array.from方法。Babel 就不會轉(zhuǎn)碼這個方法。如果想讓這個方法運行,必須使用babel-polyfill,為當(dāng)前環(huán)境提供一個墊片。

具體哪些不能轉(zhuǎn)換點擊這里

// 使用時要在轉(zhuǎn)換的es6之前引入,為了方便直接在最頂部引入即可
import 'babel-polyfill';
// 或者
require('babel-polyfill');

6. babel-loader

webpack的loader,要注意的是必須同時安裝babel-core

7. babel-plugin-transform-runtime

  1. 許多常用的墊片函數(shù)會在多個文件里面重復(fù)出現(xiàn),啟用插件 babel-plugin-transform-runtime 后,Babel 就會使用 babel-runtime 下的工具函數(shù),將這些重復(fù)的函數(shù)整合。
  2. babel-polyfill的許多函數(shù)會污染全局作用域,轉(zhuǎn)換器transformer會將這些內(nèi)置(墊片)設(shè)置別名到core-js中(避免全局污染)

假如用了babel-polyfill,最好把這個用上。
使用方法,點擊這里《Runtime transform 運行時編譯es6》注意:該模塊依賴babel-runtime

8. babel-eslint

顧名思義對babel的代碼使用eslint。用法參見官方介紹

參考文獻

《【JavaScript】深入理解Babel原理及其使用》
《Runtime transform 運行時編譯es6》
本文大量引用了阮一峰老師的《ECMAScript 6 入門》的內(nèi)容,本書詳細的介紹了es6,強烈建議閱讀。

后記

文章難免疏漏,如有問題,還請大家指正。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容