СЕМВЕР (семантическая версия) грамотность

внешний интерфейс GitHub React.js NPM

Недавно в кругу друзей гудело 10-летие Github.Редактор с удивлением обнаружил, что у многих коллег нет понятия beta и rc в номере версии.npm install package@nextВ то же время непонятно, что представляет собой следующий. Поэтому я решил написать статью для популяризации знаний о Semver (семантическая версия), составленную на Github.

фактический случай

Во-первых, давайте взглянем на журнал выпусков React, одного из самых популярных интерфейсных фреймворков, за последние 5 месяцев.Скриншот с сайта npmjs.com:

Из приведенного рисунка нам нетрудно сделать несколько выводов:

  • Версия программного обеспечения обычно состоит из трех цифр, например: X.Y.Z.
  • Версии строго увеличиваются, здесь: 16.2.0 -> 16.3.0 -> 16.3.1
  • Когда выпущена важная версия, могут быть выпущены альфа, rc и другие предыдущие версии.
  • За измененными версиями ключевых слов, таких как альфа и rc, может следовать время и метаинформация.

Можно сказать, что React проделал хорошую работу, когда выпустил версию, и версия кажется очень ясной и строгой. Это благодаря спецификации Semver (Semantic Versioning). Так в каком же сценарии появился Семвер? Какую проблему это решило? Здесь я хочу поделиться с вами концепцией «ада зависимостей».

ад зависимости

С точки зрения непрофессионала, «ад зависимостей» означает, что когда разработчик устанавливает пакет, он обнаруживает, что этот пакет зависит от других пакетов других конкретных версий. По мере того, как системные функции становятся все более и более сложными, от них зависит все больше и больше программных пакетов, а зависимости становятся все глубже и глубже, управление версиями может оказаться под угрозой блокировки в это время.

Поэтому Github разработал поучительное унифицированное правило представления номера версии под названием Semantic Versioning. Это правило определяет, как представляются номера версий, как они увеличиваются, как выполняются сравнения и что означают разные номера версий.

Официальный сайт:semver.org/Китайская версия:semver.org/lang/zh-CN/

Ниже приведен график зависимостей React, соответствующий спецификации Semver.Скриншот с сайта npm.broofa.com:

Видно, что зависимости пакетов, соответствующие спецификации Semver, очень четкие, и нет общих проблем, таких как циклические зависимости и конфликты зависимостей.

Формат версии

Формат версии: основной номер версии. дополнительный номер версии. номер редакции. Правила увеличения номера версии следующие:

  • Основной номер версии (major): когда вы вносите несовместимые изменения API,
  • Второстепенный номер версии (второстепенный): когда вы добавляете обратно совместимые функции, это можно понимать как версию функции.
  • Номер редакции (патч): Когда вы вносите исправление для обратной совместимости, его можно понимать как версию с исправлением ошибок.

Предыдущий номер версии и информация о компиляции версии могут быть добавлены в конце «основной номер версии. дополнительный номер версии. номер редакции» в качестве расширения.

Предварительная версия

когда опубликоватьбольшая версияилиОсновная функция, но нет гарантии, что эта версия будет работать на 100% правильно. В это время необходимо опубликоватьПредварительная версия. Наиболее распространенные первые версии включают в себя: бета-версию, версию в оттенках серого и версию RC. Спецификация Semver использует alpha, beta, rc (ранее называлась gama) для оформления предстоящих релизов. Их значения:

  • альфа: внутренняя версия
  • бета: общедоступная бета-версия
  • rc: то есть Release-кандидат, версия-кандидат официальной версии

Например: 1.0.0-alpha.0, 1.0.0-alpha.1, 1.0.0-beta.0, 1.0.0-rc.0, 1.0.p-rc.1 и другие версии. После альфы, беты, rc нужно привести количество раз информацию.

Руководство по выпуску версии

Перечислите некоторые из наиболее практичных правил:

  • Стандартный номер версии должен находиться в формате XYZ, а x, y и z - неотрицательные целые числа. Ноль-прокладки перед числами запрещены, а выпуск версий должен быть строго увеличиваться. Например: 1.9.1 -> 1.10.0 -> 1.11.0.
  • После выпуска версии программного обеспечения любые модификации должны быть выпущены как новая версия.
  • Номер версии 1.0.0 используется для определения общедоступного API. Когда ваше программное обеспечение выпущено в официальную среду или имеет стабильный API, вы можете выпустить версию 1.0.0.
  • Приоритет версий относится к тому, как разные версии сравниваются при сортировке. При оценке уровня приоритета версии должны быть разделены на основной номер версии, дополнительный номер версии, номер редакции и номер предыдущей версии для сравнения.

зависимости пакета npm

При выполнении npm install package -S для установки стороннего пакета npm сначала установит последнюю версию пакета, а затем запишет имя пакета и номер версии в файл package.json.

Например, при установке реагировать через npm:

{
  "dependencies": {
    "react": "~16.2.0"
  }
}

Зависимости проекта от пакетов могут быть выражены следующими тремя способами (при условии, что текущий номер версии — 16.2.0):

  • Недавно выпущенные версии патчей совместимого модуля: ~16.2.0, 16.2.x, 16.2.
  • Недавно выпущенная младшая версия совместимого модуля, версия исправления: ^ 16.2.0, 16.x, 16
  • Недавно выпущенная основная версия совместимого модуля, дополнительная версия, версия исправления: *, x

выпуск пакета npm

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

  • Номер версии патча обновления: патч версии npm
  • Номер младшей версии обновления: второстепенная версия npm
  • Обновите основной номер версии: основная версия npm

Когда выполняется публикация npm, текущая версия сначала публикуется в реестре npm, а затем значение dist-tags.latest обновляется до новой версии.

При выполнении npm publish --tag=next текущая версия будет сначала опубликована в реестре npm, а значение dist-tags.next будет обновлено до новой версии. Здесь рядом может быть любое осмысленное имя (например: v1.x, v2.x и т. д.)

Хорошо, теперь вы должны знатьnpm install package@nextЗначение рядом представляет это!


Технологический еженедельник IVWEBШок в сети, обратите внимание на публичный номер: сообщество IVWEB, регулярно каждую неделю публикуйте качественные статьи.

  • Сборник статей еженедельника:weekly
  • Командные проекты с открытым исходным кодом:Feflow