Рубрики
Без рубрики

Оценка пакетов с открытым исходным кодом JavaScript

Первоначально опубликовано на jnielson.com практически в каждом проекте, где вы достигнете … Tagged with JavaScript, начинающие, GitHub, WebDev.

Первоначально опубликовано на jnielson.com

Почти в каждом проекте появится момент, когда вы достигнете существующего пакета, чтобы увеличить исходный код, чтобы сделать его более проще, более надежным или уменьшить количество обслуживания. Когда вы добираетесь до библиотеки, важно оценить различные доступные варианты по ряду различных фронтов. Если вы просто оцените пакет на основе, если он выполнит задачу для этого, вы можете упустить некоторые важные соображения, которые могут вернуться и повредить вам позже. Например, если вы выберете пакет, в котором есть только 1 строка фактического исходного кода, и нет тестов, действительно ли этот пакет дает вам какие -либо преимущества? Я бы сказал, что это не так, но каждый проект отличается, и для вашего проекта может быть полезно импортировать эту 1 строку из пакета вместо локального файла.

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

  • Лицензионная достоверность
  • Стабильность
  • Уровень обслуживания
  • Популярность
  • Качество документации
  • Сумма кода в библиотеке
  • Количество кода, которое потребуется/сохранить в моем проекте
  • Открытые и закрытые тенденции запроса на тягу
  • Вклад документация

Используя этот список, у меня есть ряд вопросов, которые я прошу себя оценить каждую категорию, которую я включу ниже. Как правило, вам следует ответить на столько вопросов, сколько нужно, чтобы убедиться, что пакет не является определенным «нет», и записать свои ответы! Записав ответы, которые вы придаете на каждый вопрос, который вы задаете, для различных пакетов, которые вы предоставляете заметки и документацию для будущего, чтобы ответить на вопрос через 6 месяцев: «Почему вы выбрали [этот пакет] [этот пакет]? ” (который появляется чаще, чем нет).

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

Лицензионная достоверность

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

  • Является ли лицензия на коротком списке предварительно одобренных для организации?
  • Является ли лицензия, что мне удобно использовать в личном проекте?
  • Требует ли лицензия какая -либо атрибуция или принять мой проект?
  • Стоит ли использование этого пакета требований лицензии?

Стабильность

Чтобы правильно оценить пакет для использования, мне хочется посмотреть, насколько стабилен этот пакет имеет решающее значение для будущих усилий, чтобы оставаться в курсе. Я недавно написал об обновлении зависимостей вашего проекта И работа, которую требуется для этого регулярно, значительно меньше, если вы используете стабильные пакеты. Как вы определяете стабильность пакета? Я обычно использую такие вопросы, как следующее:

  • Есть частые выпуски? (Это может быть хорошо или плохо в зависимости от пакета)
  • Используют ли они альфа/бета/канарейские релизы, чтобы проверить изменения? (И люди используют их?)
  • Похоже, что люди обычно остаются в последней версии? (Это сложный вопрос, чтобы быстро найти данные, но супер стоит)
  • Существует ли цикл для внесения нарушения изменений (основные версии при использовании SEMVER)?
  • Есть ли большое количество открытых проблем? (Счет о необработанных вопросах не всегда делится полезной информацией, но это может быть полезно проверить)

Есть разные разные метрики и вещи, которые вы можете проверить, чтобы попытаться определить, насколько стабилен пакет, но я считаю, что важно учитывать, потому что некоторые другие аспекты становятся значительно менее важными, если упаковка находится в стабильном состоянии и не является ‘ Т требуется какие -либо серьезные изменения или ошибки.

Уровень обслуживания

Если у вас есть проект, который не особенно стабилен, становится жизненно важным определить, каков уровень участия нынешнего сопровождающего. Если на пакете работает только один человек, это их работа на полный рабочий день? Или у них есть другие вещи с более высоким приоритетом? Если есть несколько сопровождающих, вы могли бы рассмотреть, если кажется, что есть «содействие свинцам», который, если они отбросят пакет, перестанут двигаться вперед. В частности, с менее стабильными пакетами, остановки изменений и улучшений – это не то, что вы хотите, поскольку это может привести к тому, что критические ошибки не могут быть исправлены без подрыта пакета. При определении уровня обслуживания я склонен задавать себе такие вопросы, как:

  • Сколько участников в исходном коде пакета?
  • Похоже, есть один человек с разрешением выпустить обновления, или может несколько человек?
  • Есть ли люди, работающие над этим полный рабочий день? (Не каждый пакет нуждается в полной занятости, работающих над этим, но основные, которые мне нравятся)
  • Как быстро решаются проблемы и запросы на вытягивание? Похоже, что сопровождающие работают над этим всплесками?
  • Есть ли способ внести свой вклад в финансирование/поддержку сопровождающим? Вы можете это сделать?

Популярность

Важным соображением в тандеме с уровнем технического обслуживания является популярность пакета. Если пакет достаточно популярен, становится все более важным иметь более высокий уровень обслуживания через постоянных сопровождающих или другие средства. Но важные пакеты полезны, потому что у сопровождающих, как правило, развиваются лучшие привычки, связанные с выпусками и документацией, поскольку пакет увеличивается в популярности. Выбор пакета исключительно потому, что он популярен, не всегда лучший выбор для проекта, но он может иметь значение в доступных ресурсах, которые помогут вам выяснить, как использовать пакет. Это также может повлиять на то, насколько вероятно, что обслуживание упаковки будет подхвачено, если что -то случится, чтобы предотвратить нынешние сопровождающие не отставать от него. Важным соображением с популярностью обычно является количество загрузки пакета, но я не считаю, что метрика особенно полезна, поскольку она не дает никакого понимания того, сколько проектов на самом деле использует пакет. Мне нравится новый GitHub «используется” знаком немного больше Но это все еще имеет некоторые серьезные ограничения. На данный момент я просто укажу на то, что я использую, чтобы приблизиться к тому, насколько популярен пакет:

  • Как выглядит сравнительное количество загрузки? (Важно использовать относительные суммы, поскольку необработанные загрузки не имеют смысла)
  • Что говорит GitHub «используется” Знаком? Как это сравнивается с другими вариантами?
  • Как сравнивается проект в результате Google?
  • Отвечаны и приняты ли на вопросы о Stackoverflow? Похоже, что это сообщество, чтобы ответить на вопросы?

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

Качество документации

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

  • Когда ReadMe был обновлен?
  • Включает ли Readme все экспорты из пакета или есть функции незарегистрированных?
  • Есть ли заменчик или место для выпуска заметок?
  • Являются ли заметки ChangeLog/релиз более ясны, чем список коммитов?

Если они используют веб-сайт документации, я проверю это (в идеале исходный код для него в дополнение к живым сайту), используя такие вопросы, как следующие (в дополнение к рассмотрению документации в коде):

  • Обновляется ли веб -сайт, когда все изменится?
  • Организован ли сайт, чтобы легко найти то, что мне нужно?
  • У сайта отсутствует информация?
  • Есть ли термины на веб -сайте, которые неясны и не объяснены?

Оценка качества документации очень личная, поскольку то, что может иметь смысл для меня, имеет возможность полностью запутать следующего разработчика. Это шаг, который, я думаю, очень полезно, чтобы получить более чем мнение одного человека, поскольку обычно люди генерируют мнение о документации, как только они смотрят на это в первый раз. Проведение обзора доступной документации очень важно, чтобы убедиться, что библиотека фактически решает проблему, которую вы пытаетесь решить, но также помогает оценить, насколько легко будет выяснить, как использовать библиотеку и справиться с странным Вещи, которые неизбежно появятся.

Сумма кода в библиотеке

Иногда полезно привлечь пакет, но в других случаях, если вы просто собираетесь использовать его в паре мест, вам может быть лучше с написанием более конкретного кода для вашего проекта. Во многих случаях пакеты имеют дополнительные абстракции, которые делают их более повторными, но добавляют больше кода, чем вам может понадобиться в вашем использовании. Также может быть тот случай, когда есть встроенная языковая функция, которая может сделать больше всего, а иногда и того, что делает пакет. Например, раньше было общепринято, чтобы использовать левый пад Пакет (и у него все еще 4 миллиона еженедельных загрузок), но у JavaScript есть встроенный padstart () Метод, который делает то же самое и не требует, чтобы вы втягивали в упаковку. Итак, в некоторых случаях вы хотите задать себе такие вопросы, как:

  • Можно ли это сделать с помощью встроенной языковой функции?
  • Предоставляет ли пакет дополнительные функции, которые мне не нужны?
  • Будет ли значительное увеличение технического обслуживания в моем проекте, чтобы написать функциональность самостоятельно? (Обычно это да, но некоторые пакеты тривиальны)
  • Есть ли в пакете тесты и другие инструменты качества кода, которые я не хочу повторять?

Количество кода, которое потребуется/сохранить в моем проекте

Что -то, о чем не говорят достаточно часто при использовании пакетов, – это идея того, сколько кода требуется для потребления пакета. В некоторых случаях можно было бы создать специфичную для проекта версия пакета просто для сокращения количества кода, необходимого для использования пакета. Дэн Абрамов написал пост под названием «Оптимизирован для изменений» В котором упоминается эта идея дизайна API «Второй заказ» – как будет выглядеть и развиваться код с использованием этого API. Чтобы оценить эту идею для пакетов, на которые я смотрю, я склонен отвечать на такие вопросы, как следующее:

  • Как долго это примеры?
  • Насколько много разницы между примерами? Есть много шаблонов?
  • Разделяет ли сумма кода, который сохраняет пакет, перевешивает количество кода, которое он требует, чтобы я писал?

Открытые и закрытые тенденции запроса на тягу

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

  • Как давно были открыты открытые запросы на тягу?
  • Есть ли недавно закрытые запросы на притяжение?
  • Похоже, запросы на привлечение закрыты партиями? Как часто это происходит?
  • Запросы на притяжение обычно закрыты (отклонены) или объединены?
  • Есть ли много болтовни по запросам на притяжение, прежде чем они одобрены или отказались?

Вклад документация

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

  • Существует ли внесение документации?
  • Есть ли шаблон запроса на тягу или выпуск?

Вывод

Как только вы поставите пакет «через звонок» и оцените его, тогда что? Как вы определяете, какой пакет использовать? Обычно все сводится к личному/проекту предпочтения, какой пакет имеет больше всего смысла. Почти во всех случаях это будет компромисс, так как один пакет может быть меньше, но менее надежным или другим может быть более полным, но добавьте немного лишнего размера пакета, который вы бы предпочли не добавлять. В любом случае, какие пакеты вы в конечном итоге выберете, должны быть решением, которое вы можете сделать резервным копированием, поэтому в идеале вы записываете ответы на вопросы, которые вы задавали для каждого пакета, когда вы делаете это, чтобы иметь некоторую документацию для будущего! Я считаю, что есть большая ценность в возможности ответить на вопрос: «Почему вы выбрали этот пакет из -за другого варианта?» 6 месяцев спустя, имея заметки, особенно потому, что, если все изменилось за те 6 месяцев, у вас есть заметки с прошлого раза, и вы можете с легкостью переоценить!

Схема/подготовка

Что имеет значение с пакетом с открытым исходным кодом JavaScript? (Не заказано)

TL; DR точки:

  • Проверьте стабильность и популярность – есть частые выпуски? Люди используют это?
  • Какой уровень обслуживания? Есть ли люди, работающие над этим полный рабочий день?
  • Код/документация/качество внесения вклад – все ли документированы и работают?
  • Проверка лицензии жизненно важна! Убедитесь, что это лицензия, которую вы можете использовать
  • Подумайте о том, чтобы написать это самостоятельно, если это незначительно?

  • Стабильность (как часто они выпускают? Они делают альфа/Бета -выпуски? Люди используют их?)

  • Уровень обслуживания (люди работают над этим на полный рабочий день? У него есть несколько участников? и т.д)

  • Популярность (сколько других проектов зависит от этого? Как выглядит количество загрузки?)

  • Качество кода (у них есть тесты? CI строит?)

  • Качество документации (это обновлено? У них есть предыдущие версии? Это отдельный сайт или просто readme?)

  • Внесение документации (существует ли она? У них есть шаблоны проблемы/PR в GitHub?)

  • Открытые и закрытые запросы на притяжение (они сидели в течение долгого времени? Был ли разговор о них сзади?)

  • Какие лицензии (ы) в нем участвуют? (Ясно, почему это есть? Ваша организация разрешает это?)

  • Сколько кода на самом деле? (Bundlephobia и просмотр источника – может быть лучше встроить)

Изображение баннера предоставлено undraw.co

Оригинал: “https://dev.to/jnielson94/evaluating-javascript-open-source-packages-1j0l”