Browserify + Babelify + Babel-Preset-ES2015 で ES2015 をトランスパイルして1つのファイルに結合する
前回 Gulp-Sass で SCSS をビルドし、1ファイルの CSS ファイルを生成したが、今回はそれの ES2015 版。
お馴染み Browserify で複数のファイルを1つにまとめるのだが、その際にトランスパイルするためのツールを間に挟み込むことができる。そのツールとして Babelify を指定し、Babelify が使用するトランスパイルの設定情報として、Babel-Preset-ES2015 というパッケージを読み込む、という関係。
何はともあれ npm install。
$ npm gulp gulp-load-plugins browserify babelify babel-preset-es2015 vinyl-source-stream
Browserify を使う時は、変換されたファイルの形式が Gulp 内で扱う形式にそぐわないので、Vinyl-Source-Stream というパッケージで形式を変換してやる、という。コレ前に調べて記事書いたと思うんだけど詳しいことは忘れた。とりあえずそういうもんだと思え。w
というワケで gulpfile.js
。
const gulp = require('gulp');
// Gulp-Load-Plugins で Browserify と Vinyl-Source-Stream を読み込む
const $ = require('gulp-load-plugins')({
pattern: ['gulp-*', 'browserify', 'vinyl-source-stream']
});
gulp.task('js', () => {
return $.browserify({ // Browserify の設定
entries: ['./src/js/index.js'], // エントリポイントとなるファイル
debug: true, // ソースマップを出力するために設定する
transform: [ // Browserify のトランスフォーム設定
['babelify', { // Babelify でトランスパイルする
presets: ['es2015'], // Babel-Preset-ES2015 を読み込む指定
sourceMaps: true // ソースマップを出力する
}]
]
})
.bundle() // Browserify を実行する
.on('error', function(error) { // エラーハンドリング・アロー関数にしないこと
console.log(`Browserify Error : ${error.message}`);
this.emit('end');
})
.pipe($.vinylSourceStream('index.js')) // Browserify が生成したファイルを Vinyl 形式に変換する
.pipe(gulp.dest('./www/js')); // ./www/js/ 配下に index.js を出力する
});
エントリポイントとなる ./src/js/index.js
から、関連する全ての JS ファイルが import
で辿れるようにしておく。
これらを Babelify + Babel-Preset-ES2015 によって ES2015 の形式から ES5 にトランスパイルし、最終的に Browserify で1ファイルに結合する。生成したファイルに Vinyl-Source-Stream を噛ませて、Gulp で扱える Vinyl 形式に変換してやったら ./www/js/
配下に出力。
今回ソースマップを出力するようにしたので、生成した ./www/js/index.js
内にはソースマップの情報が追記されている。
大体コレが ES2015 なコードを Babel でトランスパイルする基本形になると思う。