Search code examples
ember.jsember-cli

Ember >2.2.0 getting regeneratorRuntime is not defined


so I was working with an iterator inside a service with Ember. The code worked using the old style scripts I cannot use the ES2015 style

ReferenceError: regeneratorRuntime is not defined

    stuff[Symbol.iterator] = function *(){
        debugger;
        let properties = Object.keys(this);
        for(let p of properties){
            yield this[p];
        }
    };

I know this is because of the new '*' operator on the function. I have seen answers https://stackoverflow.com/a/28978619/24862 that describe having to load a browser-polyfill npm but I'm a little unclear how to get this to work inside the ember framework. Has anyone done this successfully? or should I just abandon until Ember supports it.


Solution

  • Polyfill

    Babel comes with a polyfill that includes a custom regenerator runtime and core-js. Many transformations will work without it, but for full support you may need to include the polyfill in your app.

    You should now include as ember-cli-babel and not as babel. Like this:

    var app = new EmberApp(defaults, {
        'ember-cli-babel': {
            includePolyfill: true
        }
    }
    

    Regenerator:

    This package implements a fully-functional source transformation that takes the syntax for generators/yield from ECMAScript 2015 or ES2015 and Asynchronous Iteration proposal and spits out efficient JS-of-today (ES5) that behaves the same way.

    Sources: https://github.com/babel/ember-cli-babel and https://github.com/facebook/regenerator