Я только начал использовать Babel для компиляции своего кода JavaScript ES6 в ES5. Когда я начинаю использовать Promises, похоже, он не работает. Сайт Babel заявляет о поддержке обещаний через полифиллы.
Без всякой удачи я попытался добавить:
require("babel/polyfill");
или
import * as p from "babel/polyfill";
При этом я получаю следующую ошибку при загрузке моего приложения:
Не удается найти модуль 'babel / polyfill'
Я искал модуль, но, похоже, мне здесь не хватает какой-то фундаментальной вещи. Я также попытался добавить старый и хороший NPM для Bluebird, но похоже, что он не работает.
Как использовать полифилы от Babel?
npm install _name_
npm install --save babel-polyfill
иrequire('babel-polyfill)
.Ответы:
Это немного изменилось в Babel v6.
Из документов:
Монтаж:
$ npm install babel-polyfill
Использование в Node / Browserify / Webpack:
чтобы включить полифил, вам нужно указать его в верхней части точки входа в ваше приложение.
require("babel-polyfill");
Использование в браузере:
доступно из
dist/polyfill.js
файла вbabel-polyfill
выпуске npm. Это должно быть включено до всего вашего скомпилированного кода Babel. Вы можете либо добавить его к вашему скомпилированному коду, либо включить его в<script>
перед ним.ПРИМЕЧАНИЕ: не делайте
require
этого через browserify и т. Д., Используйтеbabel-polyfill
.источник
Array.protorype.findIndex()
не работают без полизаполнения, и babel не вызовет исключения при переносе? Это природа Polyfill ™?В документах Бабеля описывают это довольно лаконично:
Убедитесь, что вы требуете его в точке входа в ваше приложение, прежде чем что-либо еще вызывается. Если вы используете такой инструмент, как веб-пакет, это становится довольно простым (вы можете указать веб-пакету включить его в пакет).
Если вы используете такой инструмент, как
gulp-babel
илиbabel-loader
, вам также нужно установить самbabel
пакет, чтобы использовать полифилл.Также обратите внимание, что для модулей, которые влияют на глобальную область действия (полифилы и тому подобное), вы можете использовать краткий импорт, чтобы избежать использования неиспользуемых переменных в вашем модуле:
источник
import 'babel-core/polyfill'
без установки,babel
и это работало просто отлично.import 'babel-core/polifyll'
работает. Я попробовал это без установленного,babel
и это не работало для меня. Кстати: ссубе советую работает.Для Babel версии 7, если вы используете @ babel / preset-env, для включения polyfill все, что вам нужно сделать, это добавить флаг «useBuiltIns» со значением «using» в вашей конфигурации babel. Нет необходимости запрашивать или импортировать полизаполнение в точке входа вашего приложения.
Если указан этот флаг, babel @ 7 будет оптимизировать и включать только те необходимые вам заполнения.
Чтобы использовать этот флаг, после установки:
Просто добавьте флаг:
в ваш конфигурационный файл babel с именем "babel.config.js" (также новый для Babel @ 7) в разделе "@ babel / env":
Ссылка:
Обновление Авг 2019:
С выпуском Babel 7.4.0 (19 марта 2019 г.) @ babel / polyfill устарела. Вместо установки @ babe / polyfill вы установите core-js:
Новая запись
corejs
добавлена в ваш babel.config.jsсм. пример: https://github.com/ApolloTang/stackoverflow-eg--babel-v7.4.0-polyfill-w-core-v3
Ссылка:
источник
useBuiltIns: "usage"
не работает на моей стороне. Он просто не включает в себя никаких полифайлов в комплекте (пример: я использую генераторы и получаю сообщение об ошибке «регенератор не определен»). Любые идеи?Если ваш package.json выглядит примерно так:
И вы получите
Cannot find module 'babel/polyfill'
сообщение об ошибке, тогда вам, вероятно, просто нужно изменить оператор импорта FROM:TO:
И убедитесь, что он предшествует любому другому
import
утверждению (не обязательно в точке входа вашего приложения).Ссылка: https://babeljs.io/docs/usage/polyfill/
источник
Во-первых, очевидный ответ, который никто не дал, вам нужно установить Babel в ваше приложение:
(или
babel-core
если вы хотите вместо этогоrequire('babel-core/polyfill')
).Помимо этого, у меня есть грандиозная задача по переносу моих es6 и jsx в качестве шага сборки (то есть я не хочу использовать
babel/register
, именно поэтому я пытаюсь использоватьbabel/polyfill
непосредственно с самого начала), поэтому я бы хотел уделите больше внимания этой части ответа @ ssube:Я столкнулся с какой-то странной проблемой, из-за которой я пытался запросить
babel/polyfill
какой-то файл запуска общей среды, и я получил ошибку, на которую ссылался пользователь. Я думаю, что это может быть связано с тем, как импорт заказов Babel по сравнению с требованиями требует, но я не могу воспроизвести сейчас. В любом случае, перемещениеimport 'babel/polyfill'
в качестве первой строки в моих клиентских и серверных сценариях запуска решило проблему.Обратите внимание, что если вы вместо этого хотите использовать,
require('babel/polyfill')
я бы удостоверился, что все ваши другие операторы загрузчика модулей также требуются, а не используйте импорт - избегайте их смешивания. Другими словами, если у вас есть какие-либо операторы импорта в вашем скрипте запуска, сделайтеimport babel/polyfill
первую строку в вашем скрипте, а неrequire('babel/polyfill')
.источник
sudo
с npm docs.npmjs.com/getting-started/fixing-npm-permissionshttps://www.quora.com/What-does-babel-polyfill-do
https://hackernoon.com/polyfills-everything-you-ever-wanted-to-know-or-maybe-a-bit-less-7c8de164e423
источник
Как говорит Бабель в документации , для Babel> 7.4.0 модуль @ babel / polyfill устарел , поэтому рекомендуется использовать напрямую библиотеки core-js и регенератор-время выполнения, которые ранее были включены в @ babel / polyfill.
Так что это сработало для меня:
затем добавьте в самый верх вашего исходного js-файла:
источник