2

我有一个简单的 Ember 应用程序,我需要填充Object.fromEntries一个组件。

作为参考,我使用原生支持的 Safari 12.1.1fromEntries和不支持的 Safari 11.1.1。

AFAIK,我只需要一个适当的ember-cli-build.js配置。

如果有人能告诉我为什么以下调整不能正确地填充函数,我将不胜感激:

const app = new EmberApp(defaults, {

  'ember-cli-babel': {
    // supposedly should inject core-js/stable into app
    // @see https://github.com/babel/ember-cli-babel#polyfill
    includePolyfill: true,
  },

  babel: {
    // should replace injected core-js/stable with imports
    // that are not natively supported by config/targets.js
    // @see https://babeljs.io/docs/en/babel-preset-env#usebuiltins-entry
    useBuiltIns: 'entry',

    // explicitly use corejs v3 per babel-preset-env docs
    corejs: 3,

    // force inclusion of fromEntries regardless of config/targets.js
    include: [
      'es.object.from-entries',
    ],
  },

  //...
});

我可以看到它在那里:https ://github.com/babel/babel/blob/v7.5.5/packages/babel-preset-env/src/polyfills/corejs3/built-in-definitions.js#L265


软件包版本:

  • ember-source@3.7.2
  • ember-cli@3.5.0
  • ember-cli-babel@7.5.0
  • @babel/core@7.5.5
  • 核心js@3.2.1
4

2 回答 2

0

你的config/targets.js文件是什么样的?我想知道是否不包含 polyfill,因为您的浏览器配置仅包含最新版本的 Safari,因此 Ember 和 Babel 很聪明,不会发送额外的代码。

新应用的默认设置

'use strict';

const browsers = [
  'last 1 Chrome versions',
  'last 1 Firefox versions',
  'last 1 Safari versions'
];

const isCI = !!process.env.CI;
const isProduction = process.env.EMBER_ENV === 'production';

if (isCI || isProduction) {
  browsers.push('ie 11');
}

module.exports = {
  browsers
};

仅在生产版本中包含 IE11。如果您在本地测试 Safari 11,它将不会包含在该列表中。

尝试将其更改为 Safari 的最后 2 个版本。

const browsers = [
  'last 1 Chrome versions',
  'last 1 Firefox versions',
  'last 2 Safari versions'
];

看看这是否有帮助。

于 2019-08-16T05:19:37.223 回答
0

我遇到了同样的问题,除了 IE11 在我的列表中并且它仍然无法使用该Object.fromEntries方法。

所以这里的问题是:

  1. Ember/Broccoli 使用了一个时髦的模块系统,它可以实现useBuiltIns: 'entry',也可以useBuiltIns: 'usage'实现。在撰写本文时,此问题尚未解决。https://github.com/babel/ember-cli-babel/issues/298
  2. 包含语法基本上不起作用。https://github.com/babel/babel/issues/8932

我找到的解决方案基本上只是绕过 babel/ember/broccoli 系统,就像@babel/polyfil弃用通知说做sorta一样。

  1. 删除您添加的文件中的所有新babel内容ember-cli.build.js以尝试使其正常工作,但保留includePolyfill: true.
  2. npm install core-js --save-dev直接安装corejs
  3. 导入爆炸的确切 polyfill。
import "core-js/es/object/from-entries";

这是我让它工作的唯一方法。

于 2020-05-04T15:24:22.383 回答