Если вы видите, что популярный пакет сложно сделать легче или автор не хочет принимать PR-ы на эту тему, вы можете просто попробовать найти альтернативу.

Моя мысль в том, что если мы все изменим подход к подбору зависимостей, то лучшие библиотеки станут популярнее.
Учитывая, например, алгоритм сортировки поиска NPM: чем больше пакет скачивают, тем выше он в выдаче. Поэтому самое простое, и при этом не такое бесполезное, что вы можете сделать — не устанавливать плохие пакеты.

Но как заранее понять что пакет плохой/хороший, спросите вы?
Давайте сперва посмотрим на типичный флоу по поиску и установке пакетов:

Google/NPM → GitHub → npm install looks-good

Проблема в том, что на этих шагах мы почти не встречаем метрик, которые характеризовали бы качество пакета.
Weekly downloads в NPM обманчивая метрика, так как есть много вариантов по которым у пакета может быть много скачиваний.
Например, у moment до сих пор в несколько раз больше скачиваний чем у date-fns, хотя авторы первого уже даже заявили, чтобы их не использовали. А у react-color очень много скачиваний, потому что он попал в зависимости к таким популярным проектам, как, например, Storybook.
Unpacked size в NPM тоже почти бестолковая цифра, т.к. характеризует вес именно самого пакета. При этом, например, пакет у которого забыли убрать из публикации тесты и ненужные конфиги, может весить столько же, сколько пакет, который публикует для вас sourcemap-ы и TS-декларации.
К примеру, содержимое пакета qs, у которого 40 млн скачиваний в неделю, имеет и тесты, и настройки редатора, и даже конфиг ESLint. Суммарный вес — 160 КБ.

Если заменить ненужное на TS-декларации, то unpacked size, наверное, не сильно изменится, хотя качество либы вырастет.
На Last publish в NPM, разумеется стоит посмотреть, так как если у пакета нет обновлений больше года, значит его, скорее всего, не поддерживают и есть шанс, что скоро он устареет, в нем не будут чинить баги или добавлять фичи, которые вы можете запросить.
Число звездочек на GH это просто vanity-метрика и не характеризует доверие комьюнити к проекту. Разработчик также может поставить звездочку просто чтобы добавить репозиторий в закладки и посмотреть на него потом.
А вот на Issues надо смотреть обязательно. Если у какого-нибудь, простого по функционалу пакета, уже несколько десятков Issue, это значит, что скорее всего пользователям много чего не хватает, есть баги и проект не поддерживается в должной мере.
Отмечу, что обязательно стоит посмотреть сами Issue: о чем они, как много среди них багов, как долго они уже открыты, отвечают ли мейнтейнеры и т.д. Это, пожалуй, одно из самых полезных действий, которое вы можете сделать пытаясь оценить пакет на основе его репозитория.
Разумеется, если автор их добавил, в README проекта могут быть различные бейджи про наличие тестов, процент code coverage, актуальность зависимостей и т.д.

Но фактически, от самих GH и NPM кроме числа Issue и даты обновления толком не получить хороших числовых метрик для оценки

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with jsunderhood

jsunderhood Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @jsunderhood

21 Oct
В 2016 году, когда велась работа над MVP нашего продукта, ребятам был нужен быстрый и легкий способ внедрить генерацию PDF, при этом не вводя другие технологии, языки и т.д.

👇
Бекенд resume.io работал и работает на Rails, поэтому ребята нашли гем Wicked PDF, который генерирует PDF на основе HTML+CSS, что идеально нам подходило. Image
Wicked PDF — это ruby-обертка над CLI-инструментом wkhtmltopdf, который под капотом работает с Qt Webkit. Последний стал для нас причиной проблем, но об этом позже.

wkhtmltopdf.org Image
Read 6 tweets
20 Oct
Чтобы разработчики начали использовать ваш пакет в продакшене, информация о вашей либе должна внушать им уверенность. Обычно, люди видят, что у пакета много скачиваний и им этого достаточно, но у новой библиотеки им взяться неоткуда. Проблема курицы и яйца.

👇 Image
Без популярности неоткуда взяться установкам, а без них нет доверия, которое нужно для популярности.

Нужно, чтобы появились проекты, которые используют вашу библиотеку.

GitHub покажет их в "Used by", а NPM — в Dependents. И они же дадут первые цифры по установкам. Image
Если ваша библиотека только вышла, то вряд ли кто-то сам найдет и установит ее.

Но никто не мешает вам найти через GitHub и NPM проекты, которые используют более тяжелые аналоги и сделать PR, заменяющий их на ваш пакет. Image
Read 10 tweets
20 Oct
Коротко о продвижения микро-библиотек.

Сразу скажу, что я не особо известный разработчик. Летом у меня было всего 200 подписчиков, но за пару месяцев получилось пропиарить библиотеку так, что меня позвали и в подкаст Веб-стандарты, и в jsunderhood.

👇
Если считаете, что нужно быть "звездой", чтобы ваш проект начали использовать, то это не так. Разумеется это поможет, но у меня вроде неплохо получилось без 5k подписчиков и всемирной известности. Многое зависит от того, сколько сил вы готовы вложить именно в продвижение.
Советую посмотреть доклад @andrey_sitnik о продвижении опен-сорс проектов, так как многие вещи я оттуда использовал лично и они реально пригодились.

Read 14 tweets
20 Oct
Если рассматривать различные микро-оптимизации веса бандла, то выделил бы следующие:

1. Помимо классов, по возможности лучше не использовать и объекты, так как названия ключей в них обычно не минифицируются, а если используете, старайтесь делать ключи покороче.

👇
Вместо какого-нибудь { totalAmountOfPages: 1 } напишите { pageCount: 1 }.

А еще лучше попробовать разбить объект на отдельные переменные: названия переменных отлично минифицируются. Image
Кстати, если ваша библиотека подразумевает настройку с помощью конфиг-объекта, то лучше сразу придумать названия ключей покороче. Потом поменять их без breaking changes будет нельзя. Image
Read 8 tweets
20 Oct
Также, если избегать вещей, которые плохо минифицируются, требуют полифиллов или трансформация кода, то можно заметно снизить вес вашей библиотеки после сборки.

Примеры:
👇
1. Лучше использовать функции вместо классов. Функциям не нужна трансформация и, к тому же, в отличие от классов, они хорошо минифицируются. Избавившись от классов целиком может получится сделать итоговый минифицированный код в 2 раза легче. ImageImage
2. Используйте обычные Promise, вместо async/await и генераторов. Хоть исходный код с async/await или yield и занимает меньше строк кода, но после трансформации эти участки кода будут весить во много раза больше, чем аналогичный код на промисах. Image
Read 5 tweets
20 Oct
Как добиться того, чтобы вес библиотеки был небольшим?

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

👇
Причин избегать зависимостей в ваших пакетах просто уйма. По сути из-за добавления зависимостей вам станет сложно гарантировать вес и качество вашего пакета:
1. Зависимости могут стать уязвимыми или вообще исчезнуть (пока left-pad).

Второе конечно маловероятно, но первое достаточно частый кейс, который "подкидывает" лишние работу и переживания, как разработчикам, так и пользователям библиотек.

Меньше зависимостей — спокойней жизнь.
Read 10 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!