BabelはES6のコードをES5にコンパイルしてくれるツールです。以前は6to5と呼ばれていました。ECMAScript 6(ES6)が正式にECMAScript 2015(ES2015)という名前になったのでツール名も変更になったようです。ただ略称の方はES6で定着しているのでこのまま使いそうです。io.jsではKoaのジェネレーター関数などES6の機能を--harmmony
フラグを付けなくても使えます。せっかくなのですべてES6で書きたいところです。io.jsではV8に追加されるES6の機能を積極的にサポートしていますが、全部ではないので現状はBabelでES5に変換する必要があります。
プロジェクト
適当なディレクトリにプロジェクトを作成します。リポジトリはこちらです。
$ cd ~/node_apps/docker-koa-babel-hook |
Dockerfileのベースイメージはオフィシャルのio.jsイメージからONBUILDを使います。
FROM iojs:2.3-onbuild |
docker-compose.ymlは特に設定は行わず、Dockerホストで他のサービスが3000ポートを使っている関係から、3030にマップします。
koa: |
package.jsonはdependenciesからKoaとBabelをインストールします。
{ |
index.js
エントリポイントのindex.jsにbabel/register
を記述します。babel/registerを最初に記述してrequire()をフックします。この後のrequire()したファイルはBabelがその場自動的にES6をES5にコンパイルしてくれます。
; |
require(‘babel/register’) doesn’t workに書き込みがあるように、babel/register
を記述したファイル自体はコンパイル対象になりません。そのためapp.es6
ではなく、app.es6をrequireするindex.jsの先頭に記述します。
app.es6
app.es6が実際のアプリのコードです。拡張子をes6
にするとEmacs 24のメジャーモードに対応していないので、es6
の拡張子をinit.elなどに追加します。今回はinit-loaderを使っています。
(add-to-list 'auto-mode-alist '("\\.es6$" . js-mode)) |
app.es6はHelloWorldをするだけの単純なKoaのコードです。import
やconst
、GeneratorがあるES6のコードです。
|
Dockerイメージのビルドと実行
Dockerイメージをビルドして実行します。
$ cd ~/node_apps/docker-koa-babel-hook/ |
Dockerホストからcurlを使ってテストします。docker-compose.ymlでDockerホストの3030ポートにマップしています。Hello Worldが表示されました。
$ curl localhost:3030 |