#Babelとは
JavaScriptのコンパイラであり、トランスパイラです。
ECMA2015(ES6)以降の新しい構文をES5に変換することができます。
ReactのJSXの変換や、typescript等にも利用が可能です。
##インストール
npm install @babel/core @babel/cli @babel/preset-env --save-dev
@babel/coreはbabelの本体です。
@babel/cliはbabelをコマンドラインで操作するために利用します。
@babel/preset-envはBabelが変換処理を行う際に利用するプラグインです。
プリセットに関して、以下のようなものは非推奨であり、基本的にpreset-envを用いれば問題ない。
・babel-preset-es2015
・babel-preset-es2016
・babel-preset-es2017
・babel-preset-latest
##.babelrcやbabel.config.jsでの設定
babelはそのままでは変換してくれないので、設定方法を明記しておく必要がある。
Babel6までの設定ファイルは、.babelrc
でしたが、Babel7からはbabel.config.js
が導入された。
.babelrc
は設定を反映する際に、フォルダ毎に配置する必要がありましたが、
babel.config.js
はプロジェクトのルートに配置することで、各フォルダに個別の設定を反映させることができます。
{
"presets": ["@babel/preset-env"]
}
const presets = [
["@babel/preset-env"]
]
module.exports = { presets ]
##コンパイルを行う
以下のように、アロー演算子を利用したソースコードを用意しました。
const x3 = (n) => n * 3
その後、同フォルダで下記コマンドを実行します。
npx babel before.js --out-file after.js
after.jsが作成され、以下のようにES5の構文に変換されます。
"use strict";
var x3 = function x3(n) {
return n * 3;
}
#corejs@3とは
先ほど導入した@babel/preset-env
では構文の変換のみを行っており、generator
やPromise
等の新しい機能には対応しておりません。
それらの新しい機能を代替コードに変換するためには、新たにcore-js
等をインストールし、設定する必要があります。
@babel/polyfill
を以前は利用していましたが、Babel7.4.0から非推奨にり、core-js
にまとめられております。
##インストール
今回はcore-js
の他にregenerator-runtime
もインストールします。
async-awaitを動かすためにはregenerator-runtime
が別途必要となります。
npm install core-js regenerator-runtime --save-dev
##設定
オプションuseBuiltIns
にusage
を使用することで、必要に応じて大体コードに変換します。
オプションcorejs
にバージョンを指定します。バージョン2 or バージョン3
{
"presets": ["@babel/preset-env",{
"useBuiltIns": "usage",
"corejs":3
}]
}
const presets = [
["@babel/preset-env",{
useBuiltIns: "usage",
corejs: 3
}]
]
module.exports = { presets ]