素のnodeでES6の多くが動く

ECMAScript 2015 (ES6) | Node.js

今、BabelでES6とJSXをトランスパイルしてますが、そのBabelを起動するGulp(gulpfile.js)についてはES5で書いてました。しかしすでにnode v5.xではV8エンジンの対応状況が進んできているためにES6の仕様の多くが動いちゃうんですね。

$ node --v8-options | grep "in progress"
  --harmony_modules (enable "harmony modules" (in progress))
  --harmony_regexps (enable "harmony regular expression extensions" (in progress))
  --harmony_proxies (enable "harmony proxies" (in progress))
  --harmony_sloppy_function (enable "harmony sloppy function block scoping" (in progress))
  --harmony_sloppy_let (enable "harmony let in sloppy mode" (in progress))
  --harmony_unicode_regexps (enable "harmony unicode regexps" (in progress))
  --harmony_reflect (enable "harmony Reflect API" (in progress))
  --harmony_destructuring (enable "harmony destructuring" (in progress))

ただ、modulesがまだダメだった。import/exportはまだin progress。でもlet/constやArrow Functionはレディなのでモジュールシステムだけrequireにしておけば他は大体ES6に書けました。ここでは出てこないけどES6-classもすでに使えるわけね。

'use strict';

const gulp = require('gulp');
const jasmine = require('gulp-jasmine');
const reporter = require('jasmine-terminal-reporter');
const jsdom = require('jsdom').jsdom;
require('babel-register');

gulp.task('test', () => {
    global.document = jsdom('');
    global.window = global.document.defaultView;
    for (let key in global.window) {
        if (global.window.hasOwnProperty(key) && !global[key]) {
            global[key] = global.window[key];
        }
    }
    gulp.src('src/**/__tests__/*.js')
        .pipe(jasmine({reporter: new reporter()}));
});

そもそもObject.assign()とかES6とは知らずに使ってた。