Разработка и эксплуатация

Инструменты для версий и пакетов

Вопросы про версии и зависимости возникают в любой экосистеме: подходит ли диапазон npm под версию, которую вы собираетесь опубликовать, разрешается ли поле exports в package.json так, как ожидает сборщик, или как будет выглядеть зависимость Maven, переведённая в DSL Gradle. Здесь собраны инструменты для версий и диапазонов SemVer, PEP 440 и других пакетных менеджеров, а также редакторы package.json и его карты exports.

Калькулятор SemVer сравнивает версии и сразу проверяет диапазоны npm, а проверка версий PEP 440 — для собственной, более строгой схемы версий Python, потому что эти две системы не совпадают. Визуализация exports в package.json проверяет subpath-экспорты сразу для import и require, что покажет несовпадение, которое обычный просмотрщик JSON не заметит. Конвертер Maven в Gradle и проверка версий в Composer, NuGet, Cargo и Go пакетных менеджерах закрывают работу с другими экосистемами — всё считается локально.

8 инструментов

Вопросы об инструментах категории «Versioning & Packages»

Почему диапазон версий npm совпал с версией, которую я не ожидал?

Диапазоны вроде ^1.2.3 или ~1.2.3 подчиняются конкретным правилам SemVer о том, какие части версии разрешено менять, и легко упустить, что caret-диапазон обращается с версией 0.x иначе, чем с 1.x. Калькулятор SemVer напрямую проверяет версию против диапазона, вместо того чтобы разбираться вручную.

Валидна ли версия Python вроде 1.0.0rc1 и как она сортируется?

По PEP 440 это валидный pre-release, и он сортируется перед финальным релизом 1.0.0. Проверка версий PEP 440 нормализует и сортирует список версий Python и сверяет их со строками условий — это надёжнее, чем сравнивать версии как обычные строки вручную.

Почему exports в package.json работает с import, но не с require, или наоборот?

Поле exports может указывать разные файлы для условий import и require, и несовпадение — например, CommonJS-файл, привязанный к условию import — ломает разрешение для одного пути, но не для другого. Визуализация exports в package.json проверяет subpath-разрешение для обоих условий ещё до публикации пакета.