🔥

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


Как добиться того, чтобы вес библиотеки был небольшим? Многое, конечно, зависит от задачи, но первым универсальным пунктом я бы выделил "Не использовать зависимости пока это возможно". 👇

Причин избегать зависимостей в ваших пакетах просто уйма. По сути из-за добавления зависимостей вам станет сложно гарантировать вес и качество вашего пакета:

Зависимости могут стать уязвимыми или вообще исчезнуть (пока left-pad). Второе конечно маловероятно, но первое достаточно частый кейс, который "подкидывает" лишние работу и переживания, как разработчикам, так и пользователям библиотек. Меньше зависимостей — спокойней жизнь.

После выхода новой версии, зависимости могут начать больше весить, медленней работать или "тащить" дополнительные зависимости.
notion image

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

Из-за зависимостей в проектах может появляться несколько версий одного и того же пакета. Например, если вы разработаете какой-нибудь date-picker, который использует date-fns v2, а в проекте у пользователя используется v1, то в JS-бандл попадут обе версии.

Где-то год назад я потратил несколько дней, изучая отчеты webpack-bundle-analyzer и ковыряясь в yarn.lock нашей монорепы, пытался убрать дубли разных пакетов. "Клубок" зависимостей распутать очень сложно.

Кроме того, обычно, библиотеки загружаются в NPM уже с транспилеными кодом и вшитыми "полифилами". Это означает, что в конечном бандле может оказаться по несколько полифилов одной и той же проблемы, что прилично поднимает вес итогового JS-кода.

Например, вы используете у себя в пакете ES6 классы, для работы которых Babel меняет код и добавляет кучу функций вроде _createClass. Если какая-нибудь зависимость тоже использует классы и настроена аналогично, то в конечный бандл сайта попадет два набора полифиллов.

Окей, на GH и NPM метрик маловато, как же тогда оценить пакет не ковыряясь полдня в репозитории и не устанавливая его в свой проект? На помощь приходят такие классные сервисы и инструменты как: — bundlephobia.comnpm.anvaka.com — npm-consider
Меньше зависимостей = быстрая установка пакета, более быстрый и стабильный CI. Если все-таки решите добавить зависимость, подойдите к подбору тщательно и постарайтесь выполнить шаги, которые упоминал вчера. twitter.com/jsunderhood/st…