Сразу скажу, что я не особо известный разработчик. Летом у меня было всего 200 подписчиков, но за пару месяцев получилось пропиарить библиотеку так, что меня позвали и в подкаст Веб-стандарты, и в jsunderhood.
👇
Если считаете, что нужно быть "звездой", чтобы ваш проект начали использовать, то это не так. Разумеется это поможет, но у меня вроде неплохо получилось без 5k подписчиков и всемирной известности. Многое зависит от того, сколько сил вы готовы вложить именно в продвижение.
Советую посмотреть доклад @andrey_sitnik о продвижении опен-сорс проектов, так как многие вещи я оттуда использовал лично и они реально пригодились.
Бесполезный проект продвинуть невозможно.
У хорошей микро-библиотеки есть главное, что необходимо для роста популярности — польза для пользователя.
Если подойти к разработке проекта используя принципы, которые я описывал в начале дня, то она будет в разы легче/быстрее аналогов.
Таким образом, у вас изначально есть как минимум 1–2 преимущества на фоне "конкурентов". Смело пишите о них в первых блоках вашего README.
Не поленитесь потратить некоторое время и сделать бенчмарки. Тогда люди смогут объективно оценить выгоду от использования вашей библиотеки.
В react-colorful я вообще собрал бенчмарк на основе бейджей, использующих API bundlephobia.com.
Как только вы сделали первые стабильные версии, сформировали хорошее README, нужно запускать волну продвижения: делаете регулярные посты о вашем проекте.
Нет смысла делать что-то целый год, чтобы потом написать один твит. Публикуйте информацию по мере выхода фич и развития проекта. Пиара много не бывает.
Выпустили первую версию — пост. Добавили поддержку мобильных — пост. Добавили a11y — пост. Сделали еще легче — снова пост.
Как разработчик микро-библиотеки, вы в выгодном положении — ваш проект уже несет очевидную пользу для комьюнити и это упрощает вам продвижение, так как кураторам каналов и сайтов, по сути, нет смысла не публиковать информацию о вашей библиотеке.
Несколько постов в Твиттере на английском, несколько публикаций на Reddit/DEVto, пара постов в Telegram/Twitter-каналах и у вас начнет формироваться свое комьюнити. Дальше в том же духе и расширяя спектр каналов.
Кто-то скажет: "У меня вообще нет подписчиков, как люди увидят мои твиты?". Справедливо. И я вас понимаю, ведь у меня такая же история.
Для этого, во-первых, и надо пробовать Reddit и публичные сайты/каналы, где ваша личная популярность не так сильно влияет на результат.
Reddit на удивление сильно помог нам на начальном этапе продвижения. После первых постов у нас даже появились активные контрибьюторы.
Так же, рекомендую вам не стесняться mention-ить в Твиттере известных разработчиков, которые могут оценить вашу заботу о размере, доступности или других ценностях. Например, Дэн Абрамов, Андрей Ситник или ребята из Preact легко могут сделать ретвит и охват поста будет огромный.
• • •
Missing some Tweet in this thread? You can try to
force a refresh
В 2016 году, когда велась работа над MVP нашего продукта, ребятам был нужен быстрый и легкий способ внедрить генерацию PDF, при этом не вводя другие технологии, языки и т.д.
👇
Бекенд resume.io работал и работает на Rails, поэтому ребята нашли гем Wicked PDF, который генерирует PDF на основе HTML+CSS, что идеально нам подходило.
Wicked PDF — это ruby-обертка над CLI-инструментом wkhtmltopdf, который под капотом работает с Qt Webkit. Последний стал для нас причиной проблем, но об этом позже.
Чтобы разработчики начали использовать ваш пакет в продакшене, информация о вашей либе должна внушать им уверенность. Обычно, люди видят, что у пакета много скачиваний и им этого достаточно, но у новой библиотеки им взяться неоткуда. Проблема курицы и яйца.
👇
Без популярности неоткуда взяться установкам, а без них нет доверия, которое нужно для популярности.
Нужно, чтобы появились проекты, которые используют вашу библиотеку.
GitHub покажет их в "Used by", а NPM — в Dependents. И они же дадут первые цифры по установкам.
Если ваша библиотека только вышла, то вряд ли кто-то сам найдет и установит ее.
Но никто не мешает вам найти через GitHub и NPM проекты, которые используют более тяжелые аналоги и сделать PR, заменяющий их на ваш пакет.
Если рассматривать различные микро-оптимизации веса бандла, то выделил бы следующие:
1. Помимо классов, по возможности лучше не использовать и объекты, так как названия ключей в них обычно не минифицируются, а если используете, старайтесь делать ключи покороче.
А еще лучше попробовать разбить объект на отдельные переменные: названия переменных отлично минифицируются.
Кстати, если ваша библиотека подразумевает настройку с помощью конфиг-объекта, то лучше сразу придумать названия ключей покороче. Потом поменять их без breaking changes будет нельзя.
Также, если избегать вещей, которые плохо минифицируются, требуют полифиллов или трансформация кода, то можно заметно снизить вес вашей библиотеки после сборки.
Примеры:
👇
1. Лучше использовать функции вместо классов. Функциям не нужна трансформация и, к тому же, в отличие от классов, они хорошо минифицируются. Избавившись от классов целиком может получится сделать итоговый минифицированный код в 2 раза легче.
2. Используйте обычные Promise, вместо async/await и генераторов. Хоть исходный код с async/await или yield и занимает меньше строк кода, но после трансформации эти участки кода будут весить во много раза больше, чем аналогичный код на промисах.
Как добиться того, чтобы вес библиотеки был небольшим?
Многое, конечно, зависит от задачи, но первым универсальным пунктом я бы выделил "Не использовать зависимости пока это возможно".
👇
Причин избегать зависимостей в ваших пакетах просто уйма. По сути из-за добавления зависимостей вам станет сложно гарантировать вес и качество вашего пакета:
1. Зависимости могут стать уязвимыми или вообще исчезнуть (пока left-pad).
Второе конечно маловероятно, но первое достаточно частый кейс, который "подкидывает" лишние работу и переживания, как разработчикам, так и пользователям библиотек.
Давайте наконец перейдем к тому, как разрабатывать микро-библиотеки.
Если вы нашли какую-то проблему или сферу для которой вы можете создать новое lightweight-решение, то не рекомендую сразу писать код, — начните с формирования целей и ограничений.
👇
Если решите, например, создать альтернативу какому-то тяжелому компоненту, то вам стоит заранее определить максимальный размер.
Перед разработкой react-colorful я поставил себе цель сделать импорт своего компонента минимум в 10 раз легче, чем у react-color.
Почему это важно?
Во-первых, вам нужна цель, чтобы разработка вашей библиотеки не превратилась просто в копирование. Если у вас будут ограничения, вы изначально будете продумывать архитектуру таким образом, чтобы ваша библиотека была лучше.