ember.js 无法聚合填充对象,来自Ember中的条目

x33g5p2x  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(143)

我有一个简单的Ember应用程序,我需要在一个组件中使用polyfill Object.fromEntries
作为参考,我使用的是原生支持fromEntries的Safari 12.1.1和不支持fromEntries的Safari 11.1.1。
AFAIK,所有我应该需要的是一个适当的ember-cli-build.js配置。
如果有人能告诉我为什么下面的调整不能正确地对函数进行polyfill,我将不胜感激:

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源@3.7.2
  • ember-cli@3.5.0版本
  • 7.5.0版的ember
  • @巴别塔/核心@7.5.5
  • 内核-js@3.2.1
f4t66c6m

f4t66c6m1#

你的config/targets.js文件看起来像什么?我想知道如果polyfill不包括在内,因为你的浏览器配置只包括Safari的最新版本,所以Ember和Babel是聪明的,没有运送额外的代码。
default for new apps

'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'
];

看看有没有帮助。

zazmityj

zazmityj2#

我也遇到了同样的问题,除了IE11在我的列表中,它仍然不能使用Object.fromEntries方法。
所以这里的问题是:

  1. Ember/Broccoli使用了一个时髦的模块系统,使得useBuiltIns: 'entry'useBuiltIns: 'usage'无法实现。截至本文撰写时,此问题尚未得到解决。https://github.com/babel/ember-cli-babel/issues/298
  2. include语法基本上不起作用。https://github.com/babel/babel/issues/8932
    我找到的解决方案是基本上绕过babel/ember/broccoli系统,就像@babel/polyfil的弃用通知说要做 sorta 一样。
    1.删除ember-cli.build.js文件中您添加的所有新的babel内容,以尝试使其工作,但保留includePolyfill: true
  3. npm install core-js --save-dev以直接安装corejs
    1.导入分解的精确多边形填充。
import "core-js/es/object/from-entries";

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

相关问题