🔥

Тред (Влад Шилов)


Слоган первого дня: «Do not choose dependencies blindly». Начну с истории, которые слушатели подкаста Веб-стандарты, от меня недавно слышали (youtu.be/ZWjfMGFITHE)...

В июне нам, в resume.io, понадобился компонент колор-пикера, чтобы пользователи могли менять цвет фонов и ссылок в их резюме. Я не хотел изобретать велосипед, а планировал найти готовое решение и кастомизировать его под разработанный нами минималистичный дизайн.
notion image

Я пошел в Google и NPM c поисковым запросом "react color picker", и не смог найти ничего кроме пакета react-color. Потыкав демку и увидев 8k звездочек на GitHub и почти 2 млн скачиваний на NPM в неделю, я подумал, что это явно хорошая штука, и сделал "npm install react-color".

После установки я только и делал, что удивлялся: Импорт любого компонента из react-color делал наш бандл тяжелее аж на 140 KB. Кастомизировать внешний вид практически невозможно, плохая производительность убивала юзабилити, а на a11y даже не было и намека.

У меня в голове случился конфликт: «Не может же такой популярный пакет быть таким плохим. Я же вижу, что комьюнити его использует». И решил посмотреть на пакет повнимательней, чем это сделал в первый раз:

Сначала я увидел, что там не настроен три-шейкинг, поэтому несмотря на то, что я импортировал только один компонент, к нам в бандл попал код всех 10+ компонентов, а также все их зависимости.

К слову, прямых зависимостей у пакета оказалось аж 6 штук, а всего в графе зависимостей их 11. Пожалуй, многовато для одного компонента.

Сами зависимости, тоже были "хороши". Например, библиотека tinycolor для конвертации цветов (у которой между прочим 3 млн скачиваний в неделю) весит 15 KB, не умеет три-шейкинг и, при этом, в коде есть "Big List of Colors" на 150 строчек:
notion image

Я начал искать другие пикеры и изучать их. Они оказались примерно такими же (куча зависимостей, большой вес, нет a11y). Посмотрев на популярные пакеты для других задач (не только колор-пикеры и не только для React), я увидел проблему:

Пакеты, которые, в буквальном смысле, замедляют веб, могут стать популярными. А высокая популярность подталкивает еще больше людей к их использованию и делает менее вероятным использование более новых и качественных аналогов. На этой неделе мы вместе подумаем, что можно сделать.