ES6-generators-example
You can setup a flexible system using ES6 generators for Node even today
Background
EcmaScript6 (called Harmony) has an excellent feature - generators. They offer a very intuitive way of dealing with asynchronous code (usually in conjunction with promise library like Q). Once I wrapped my mind around using them, I wanted to simplify my projects (typically using promises) using generators.
After looking around, I found that generators are supported pretty much by every tool I use. The only thing stopping me is a requirement to share my module with others, who are still running stable Nodejs 0.10.x without generator support.
Solution
I write all my code as usual, but using EcmaScript6 in folder es6
.
I run the code using node v0.11 with --harmony
command line option, by using
an alias harm=node --harmony
. I am also using
grunt-regenerator to convert
every file from ES6 to EcmaScript5 (using regenerator).
// Gruntfile.jsregenerator: all: files: expand: true cwd: 'es6/' src: '**/*.js' dest: 'es5/'
The generated EcmaScript5 code is committed to the repo too.
runtime
I point at a simple pick-ecmascript.js file from package.json that select which code to run: ES6 or ES5. The script looks at the node version and command line arguments to figure out which version to start. If ES5 is selected, the script also loads a small supporting function by needed to run the converted code (provided by the regenerator)
{ if processversionsnode1 < 11 return false; return processexecArgv;} if console; ; else console; ; ;
execution
A typical run using node v0.11 using npm start
command
$ npm start > es6-generators-example@0.0.1 start /Users/gbahmutov/git/es6-generators-example> node --harmony pick-ecmascript.js Harmony!1249
Small print
Author: Gleb Bahmutov © 2013
License: MIT - do anything with the code, but don't blame me if it does not work.
Support: if you find any problems with this module, email / tweet / open issue on Github