Webpack больше не заполняет автоматически API-интерфейсы Node.js. Это серьезное критическое изменение, которое доставит неудобства как пользователям, так и разработчикам пакетов.

Большинство пакетов на npm в основном созданы с учетом Node.js. Однако, благодаря автоматическому полифиллингу, большинство из них в течение многих лет нормально работали и в браузере. Проблема в том, что Webpack создавал удобство за счет автоматического полифиллинга, а затем внезапно его убрал. Если бы у них никогда не было полифилов, это не было бы проблемой, но разработчики теперь ожидают, что пакеты на npm будут просто работать в браузере после объединения.

Хотя я понимаю, что Webpack - важный инструмент в сообществе JavaScript, лично у меня смешанные чувства по этому поводу, потому что он причинил мне много горя как сопровождающего пакета. Пользователи думают, что каждая проблема с инструментом / конфигурацией Webpack связана с определенным пакетом и открывает проблему с просьбой о поддержке пакета вместо Webpack. Только за последний год мне пришлось столкнуться с сотнями проблем с Webpack в моих репозиториях.

С удалением автоматического полифиллинга ситуация станет еще хуже, поэтому я собираюсь четко обозначить свою позицию по этому поводу:

  • Мои пакеты в основном созданы для Node.js. Многие из них работают в браузерах автоматически (то есть они не используют API-интерфейсы Node.js). Некоторым требуются API-интерфейсы Node.js, а в Webpack 5 вы можете их полифиллировать.
  • Я не собираюсь добавлять полифилы в свои пакеты. Полифиллы добавляют лишнего шума и ошибок, и я не хочу, чтобы это доставляло неудобства пользователям Node.js.
  • Я не собираюсь оказывать поддержку Webpack. В прошлом я был довольно снисходительным и отвечал на большинство вопросов поддержки Webpack, но это отнимает у меня много времени, которое я мог бы потратить на более важные вещи. Вместо этого я буду направлять пользователей на каналы поддержки Webpack.

Основная причина, по которой я люблю Node.js, заключается в том, что мне не приходится сталкиваться с ужасами, связанными с интерфейсными инструментами JS.

Честно говоря, Webpack без полифиллинга имеет смысл в теории. Я просто думаю, что они сделали это слишком рано и слишком мало задумывались о его влиянии на экосистему. Я полагаю, что это изменение было бы намного проще сделать через несколько лет, когда гораздо больше пакетов Node.js будут доступны только для ESM, а Node.js поддерживает больше API-интерфейсов браузера.

Это отстой!

Я согласен. Пойдите и пожаловаться на трекер проблем Webpack. Они стали причиной этого.

Как теперь я могу вручную полифилить вещи?

Вот что говорится в сообщении блога Webpack:

МИГРАЦИЯ: resolve.alias и ProvidePlugin. Ошибки подскажут. (Обратитесь к node-libs-browser для полифиллов и моков, используемых в v4)

Что я могу сделать, чтобы улучшить ситуацию в долгосрочной перспективе?

Вы можете помочь сделать Node.js и браузеры более унифицированными. Например, в Node.js обычно используется util.promisify. Я не понимаю, почему такой важный метод недоступен в браузерах. В свою очередь, у браузеров есть API, которые должны быть в Node.js. Например, fetch, Web Streams (модуль Node.js stream ужасен), Web Crypto (я слышал слухи об этом), Websockets и т. Д.