Napping Panda Missionaries
    Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    es6-generators-examplepublic

    ES6-generators-example

    You can setup a flexible system using ES6 generators for Node even today

    NPM

    Build status dependencies devdependencies

    endorse

    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.js
    regenerator: {
        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)

    function isHarmony() {
      if (process.versions.node.split('.')[1] < 11) {
        return false;
      }
      return process.execArgv.some(function (arg) {
        return arg == '--harmony';
      });
    }
     
    if (isHarmony()) {
      console.log('Harmony!');
      require('./es6');
    } else {
      console.log('ES5 :(');
      require('./node_modules/grunt-regenerator/node_modules/regenerator/runtime/dev.js');
      require('./es5');
    }

    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!
    1
    2
    4
    9

    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

    Keywords

    none

    install

    npm i es6-generators-example

    Downloadsweekly downloads

    6

    version

    0.0.1

    license

    none

    last publish

    collaborators

    • avatar