Невозможно заполнить Object.fromEntries в Ember
У меня есть простое приложение Ember, и мне нужно заполнить Object.fromEntries
в компоненте.
Для справки я использую Safari 12.1.1, который поддерживает fromEntries
изначально и 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
- @ Столпотворение / ядро @ 7.5.5
- core-js@3.2.1
1 ответ
У меня такая же проблема, за исключением того, что IE11 находится в моем списке, и он все еще не может использовать Object.fromEntries
метод.
Итак, проблема в том, что:
- Ember / Broccoli использует забавную модульную систему, которая делает
useBuiltIns: 'entry'
а такжеuseBuiltIns: 'usage'
невозможно. На момент написания эта проблема еще не прорабатывалась. https://github.com/babel/ember-cli-babel/issues/298 - Синтаксис include в основном не работает. https://github.com/babel/babel/issues/8932
Решение, которое я нашел, заключалось в том, чтобы просто обойти систему babel / ember / broccoli, как и @babel/polyfil
уведомление об устаревании говорит делать sorta.
- Удалите все новое
babel
вещи вember-cli.build.js
файл, который вы добавили, чтобы попытаться заставить его работать, но оставьтеincludePolyfill: true
. npm install core-js --save-dev
установить corejs напрямую- Импортируйте именно тот полифилл, который взрывается.
import "core-js/es/object/from-entries";
Это единственный способ заставить его работать.
Что делает твой 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 локально, он не будет включен в этот список.
Попробуйте изменить его на последние 2 версии Safari.
const browsers = [
'last 1 Chrome versions',
'last 1 Firefox versions',
'last 2 Safari versions'
];
И посмотри, поможет ли это.