Что такое стабильность пакета в контексте управления зависимостями?

Ответ

Стабильность пакета — это показатель его готовности к использованию в production-среде. В экосистеме PHP, управляемой Composer, она определяется через семантическое версионирование (SemVer) и специальные метки.

Уровни стабильности (от наиболее к наименее стабильным):

  • stable — стабильный релиз, рекомендован для продакшена.
  • RC (Release Candidate) — кандидат на релиз, проходит финальное тестирование.
  • beta — бета-версия для раннего тестирования функциональности.
  • alpha — альфа-версия с сырой, активно разрабатываемой функциональностью.
  • dev — версия из ветки разработки (например, dev-main), абсолютно нестабильна.

Управление в composer.json: Вы можете глобально ограничить минимально допустимую стабильность для всех пакетов и точечно разрешить нестабильные версии для конкретных зависимостей.

{
    "minimum-stability": "stable",
    "prefer-stable": true,
    "require": {
        "vendor/stable-package": "^2.0",
        "vendor/experimental-package": "dev-feature-branch as 1.0.x-dev"
    }
}

Практика: В production мы всегда выставляем "minimum-stability": "stable" и "prefer-stable": true. Пакеты с метками dev, alpha или beta подключаем только в разработке, явно указывая их в require или require-dev, и только при острой необходимости протестировать новый функционал.

Ответ 18+ 🔞

Слушай, а вот эта вся история со стабильностью пакетов — это ж, блядь, как выбор между поехать на проверенной тачке или сесть на самопал, который на ходу развалиться может. В мире PHP, где всем заправляет Composer, за стабильность отвечает эта ваша семантическая версионировка (SemVer) и куча разных меток. Если коротко — это маркер того, насколько пакет готов, чтобы его в продакшен воткнуть, или он тебе всю систему ебёт копытами.

Вот смотри, какие бывают уровни, от самых надёжных до полного пиздеца:

  • stable — это стабильный релиз, годный в дело. Как иномарка с пробегом, всё проверено, можно в дальнюю дорогу.
  • RC (Release Candidate) — кандидат в релизы. Вроде бы уже почти готово, но последние тесты гоняют. Риск есть, но небольшой.
  • beta — бета-версия. Тут уже начинается веселье. Функционал вроде есть, но багов — овердохуища. Только для самых отчаянных тестеров.
  • alpha — альфа-версия. Это, ёпта, сырой код, который только что из-под паяльника вылез. Может работать, а может и хуй с горы свалиться. Только для разработки, и то с молитвой.
  • dev — версия прямо из ветки разработки (типа dev-main). Это полная нестабильность, пиздец и хаос. Сегодня работает, завтра — ядрёна вошь! Только если ты сам её пишешь и готов каждый час всё чинить.

Как этим безобразием в composer.json управлять? Можно на всю систему глобально поставить ограничение, а можно для какого-то одного кривого пакета сделать исключение.

{
    "minimum-stability": "stable",
    "prefer-stable": true,
    "require": {
        "vendor/stable-package": "^2.0",
        "vendor/experimental-package": "dev-feature-branch as 1.0.x-dev"
    }
}

А теперь практика, чувак: На боевом сервере, в продакшене, всегда выставляем "minimum-stability": "stable" и "prefer-stable": true. Это святое. Пакеты с метками dev, alpha или beta — это как гости с дурной репутацией. Пускаем их только на свою тестовую площадку, в require-dev, и то только если реально приперло и новую фичу срочно надо попробовать. А то так и до инцидента недалеко, где ты потом будешь охуевать, почему всё накрылось медным тазом.