概要
babel.jsをつかって ES6のシンタックスで書かれたjavascriptファイルをES5のシンタックスにトランスパイルする方法をまとめました。
実務で使ったことなかったので勉強がてらさらっとまとめます。
babel-cliのインストール
babelをコマンドラインで利用するに当たって、babelのコマンドラインクライアントである、npm モジュールのbabel-cliをインストールする必要があります。
開発環境のみで使うので –save-devでpackage.jsonに対してdevDependenciesにモジュールの情報を追記させます。
$ npm install --save-dev babel-cli
今回はサンプルとして今回 hapiというhttpサーバモジュールを使うのでこちらもインストールしておきます
$ npm install --save hapi
.babelrcにプラグイン設定記述
babelでトランスパイルする際に、利用するプラグインを指定する必要があります。
今回はES6(ES2015とも言う)からES5へトランスパイルするため、ES2015 presetを指定します。
babeljs.io
babelコマンドの –presetsオプションでも指定できますが、毎回打つのは面倒なので、 babelの設定を記述するファイルである .babelrcを作成し、json形式で記述します。
.babelrc
{ "presets": ["es2015"] }
presets項目に使用するプラグイン名を指定します。
トランスパイル元のjsファイル作成
ここで、トランスパイル元のjsファイルである src/index.jsを作成します。
hapiモジュールを使って簡単なhttpサーバを作ります。
全てES6(ES2015)のシンタックスで記述します。
import Hapi from 'hapi'; const server = new Hapi.Server(); server.connection({ host: 'localhost', port: 8000 }); // Add routing server.route({ method: 'GET', path: '/hello', handler: function(request, reply) { console.log('[/hello] requested'); reply('hello world'); } }); server.start();
これを importや constを使わない、ES5形式にトランスパイルさせます。
babelコマンドをつかったトランスパイル
トランスパイルした後のファイルは dist/index.jsに作成させるとします。
さっそくコマンドラインでbabelコマンドを使ってトランスパイルさせます。
babelコマンドの –out-fileオプションをつかって、トランスパイル後のファイルの出力先を指定します。
$ babel src/index.js --out-file dist/index.js
これによって、 dist/index.jsにES5形式にトランスパイルされたjsファイルができあがります。
'use strict'; var _hapi = require('hapi'); var _hapi2 = _interopRequireDefault(_hapi); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var server = new _hapi2.default.Server(); server.connection({ host: 'localhost', port: 8000 }); // Add routing server.route({ method: 'GET', path: '/hello', handler: function handler(request, reply) { console.log('[/hello] requested'); reply('hello world'); } }); server.start();
元のjsファイルで使っていた import, const が使われずにそれぞれ require varを使うようにトランスパイルされているのが確認できます。
babelをつかったトランスパイルの手順は以上となります。
まだ試していませんが、最新のES2017形式のファイルをES5にトランスパイルする場合は ES2017 presetを使えばできます。
babeljs.io