Как я могу использовать babel-polyfill для нескольких отдельных записей/выходов?

У меня есть это в моем webpack.config.js для создания двух разных выходов из двух источников:

module.exports = {
  entry: {
    'dist/index.js': ['babel-polyfill', './src/Component.jsx'],
    'example/bundle.js': ['babel-polyfill', './src/Page.jsx'],
  },
  output: {
    path: './',
    filename: '[name]',
  },
  ...

Компиляция с помощью webpack работает отлично, но если я загружаю index.js в браузере, я получаю эту ошибку:

Uncaught Error: разрешен только один экземпляр babel-polyfill

Мне нужен babel-polyfill для обоих выходов. Что я могу сделать?


person Rotareti    schedule 06.09.2016    source источник
comment
Не могли бы вы уточнить, почему именно вы хотите, чтобы это было в обеих точках входа? Он довольно большой, вы действительно не хотите загружать его дважды без веской причины.   -  person loganfsmyth    schedule 06.09.2016
comment
Конечно! Я хочу создать компонент реакции в виде пакета npm (dist/index.js). Чтобы разработать компонент изолированно, я создал небольшую страницу (example/bundle.js), которая загружает компонент и отображает результат. Когда я работаю над компонентом, я вижу результаты в браузере на этой маленькой странице. Накладные расходы не будут проблемой, поскольку в большинстве случаев код остается небольшим.   -  person Rotareti    schedule 06.09.2016


Ответы (2)


При разработке библиотеки (в отличие от приложения) команда Babel не рекомендует включать babel-polyfill в вашу библиотеку. Мы рекомендуем либо:

  1. Предположим, что глобальные переменные ES6 присутствуют, поэтому вы должны указать пользователям вашей библиотеки загружать babel-polyfill в свою собственную кодовую базу.
  2. Используйте babel-runtime, включив babel-plugin-transform-runtime, который пытается проанализировать ваш код, чтобы выяснить, какие функции библиотеки ES6 вы используете, а затем переписывает код для загрузки полифиллированной логики из babel-runtime, а не из глобальной области. Недостатком этого подхода является то, что он не может полифилить новые методы .prototype, такие как Array.prototype.find, поскольку он не может знать, является ли foo.find массивом.

Поэтому я бы порекомендовал полностью удалить babel-polyfill из пакета dist/index.js.

person loganfsmyth    schedule 06.09.2016
comment
Какой вариант вы рекомендуете? Кроме того, если я хочу загрузить его самостоятельно, как бы вы порекомендовали это сделать? - person shinzou; 29.03.2017
comment
Чтобы создать файл js только с import "babel-polyfill"; и добавить его запись и сначала загрузить его? - person shinzou; 29.03.2017

Используйте идемпотент-babel-polyfill

import 'idempotent-babel-polyfill';

https://github.com/codejamninja/idempotent-babel-polyfill

person Clay Risser    schedule 14.05.2018