素の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とは知らずに使ってた。