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 и т. Д.