【问题标题】:Ember >2.2.0 getting regeneratorRuntime is not definedEmber >2.2.0 获取 regeneratorRuntime 未定义
【发布时间】:2017-06-19 22:04:32
【问题描述】:

所以我在使用 Ember 的服务中使用迭代器。代码使用旧样式脚本工作,我不能使用 ES2015 样式

ReferenceError: regeneratorRuntime 未定义

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

我知道这是因为函数上有新的“*”运算符。我已经看到答案https://stackoverflow.com/a/28978619/24862 描述了必须加载浏览器-polyfill npm,但我有点不清楚如何让它在 ember 框架内工作。有没有人成功做到这一点?还是我应该放弃直到 Ember 支持它。

【问题讨论】:

  • 你说的是 ember-cli 吗? Ember 本身在语言级别的语法上不会有任何问题。
  • 是的,对不起。我正在使用 Ember-Cli 并且代码位于控制器或组件中......老实说,我正在从另一个 ES2015 测试项目中复制一些代码。我可以理解某些功能不可用,但由于我从未见过列表,我只是假设如果浏览器有,Ember-Cli 会。

标签: ember.js ember-cli


【解决方案1】:

Polyfill

Babel 带有一个 polyfill,其中包括一个自定义的 regenerator 运行时和 core-js。没有它,许多转换都可以工作,但为了获得全面支持,您可能需要在您的应用中包含 polyfill。

您现在应该包含ember-cli-babel 而不是babel。像这样:

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

再生器:

这个包实现了一个功能齐全的源代码转换,它采用 ECMAScript 2015 或 ES2015 和异步迭代提案的生成器/yield 的语法,并吐出行为相同的高效 JS-of-today (ES5)。

来源:https://github.com/babel/ember-cli-babelhttps://github.com/facebook/regenerator

【讨论】:

    【解决方案2】:

    也许你对 Babel.js 的使用需要包含 polyfill,在你的 ember-cli-build.js 文件中使用:

      var app = new EmberApp(defaults, {
        // Add options here
        babel: {
          includePolyfill: true
        }
      });
    

    【讨论】:

    • 我不完全确定这会奏效,因为我在这个项目的管道上还有 6 个月的时间......但是因为你花时间回答它。不妨把它从未回答的列表中删除。
    猜你喜欢
    • 2015-05-12
    • 2021-01-04
    • 2020-05-29
    • 2021-09-26
    • 1970-01-01
    • 2016-02-05
    相关资源
    最近更新 更多