За пределами NPM: выбираем зависимости с умом

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

Поиск пакетов

Поиск пакетов на npmjs.com работает не лучшим образом. Например, поиск по запросам couchdb promise и couchdb promises выдаёт разные результаты.

Сервис npms стремится решить проблему поиска благодаря использованию продвинутых возможностей Elasticsearch и уникальной системе ранжированя пакетов.

Анализ зависимостей пакетов

Не лишним будет проверить транзитивные зависимости, которые попадут в ваш проект вместе с пакетом, который вы планируете использовать. Особенное внимание стоит обратить на:

  • лицензии, не подходящие вашему проекту
  • общее количество зависимостей и их мейнтейнеров (обычно чем больше зависимостей, тем хуже)

Для такого анализа есть два довольно похожих сервиса: npm.anvaka.com и npmgraph. Первый сервис генерирует более красивую визуализацию, а второй позволяет целиком загрузить ваш package.json, чтобы сразу проверить все уже добавленные пакеты.

Размер пакета на диске и в бандле

Наверняка вы видели мемы о размере node_modules. Будем честны: мем смешной, а ситуация страшная.

Heaviest objects in the universe: sun, neutron star, black hole, node_modules

Когда речь заходит о размере пакета, есть два аспекта:

  • install size, размер установки: количество байтов, занимаемое пакетом на машине разработчика после установки
  • bundle size, размер бандла: количество байтов, занимаемое пакетом в конечном бандле приложения, который скачивается браузерами пользователей

Размер установки влияет на удобство разработки, время сборки и утилизацию ресурсов в CI. Размер бандла влияет в первую очередь на пользовательский опыт.

Через Packagephobia можно проверить размера установки пакета.

Через Bundlephobia и bundlejs можно проверить, как пакет повлияет на ваш бандл. Bundlephobia — первый инструмент подобного рода, без каких-либо особенных фич. Bundlejs — новый и гораздо более продвинутый инструмент, поддерживающий тришейкинг, сборку нескольких пакетов одновременно, и более тонкую настройку бандлинга.

Наконец, самый новый из всех сервис pkg-size позволяет сразу проверить и размер установки, и размер бандла для выбранного пакета.

Исследование содержимого пакета

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

Также иногда бывает полезно проверить разницу между двумя версиями пакета, чтобы убедиться в наличии нужного исправления бага (иногда ченджлоги врут) или провести аудит безопасности при обновлении зависимостей.

Сервис npmfs — подходящий для этих задач инструмент: он поддерживает просмотр содержимого пакета, сравнение версий пакета, ссылки на конкретные строки кода и диффы, а также скачивание любых файлов или целых директорий из пакета.

Просто посмотреть содержимое пакета также можно через сервис unpkg, но это не его основное предназначение.