前言
配置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)換的es6之前引入,為了方便直接在最頂部引入即可
import 'babel-polyfill';
// 或者
require('babel-polyfill');
6. babel-loader
webpack的loader,要注意的是必須同時安裝babel-core
7. babel-plugin-transform-runtime
- 許多常用的墊片函數(shù)會在多個文件里面重復(fù)出現(xiàn),啟用插件 babel-plugin-transform-runtime 后,Babel 就會使用 babel-runtime 下的工具函數(shù),將這些重復(fù)的函數(shù)整合。
- 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,強烈建議閱讀。
后記
文章難免疏漏,如有問題,還請大家指正。