3. Версии зависимостей
Семантическое управление версиями
Пакеты в Yarn следуют Семантическому управлению версиями, также известному как «semver». При установке нового пакета из реестра он будет добавлен в вашу package.json с диапазоном версий semver.
Эти версии разбиты на major.minor.patch и выглядят как одна из этих: 3.14.1, 0.42.0, 2.7.18. Каждая часть версии увеличивается в разное время:
- Увеличивайте
majorпри внесении несовместимых изменений в API пакета. - Увеличивайте
minorпри добавлении новой функциональности, сохраняя обратную совместимость - Увеличивайте
patchпри внесении исправлений ошибок, сохраняя обратную совместимость
Примечание: Иногда к формату semver также добавляются «метки» или «расширения», которые отмечают предварительные версии или бета-версии (например,
2.0.0-beta.3)
Когда разработчики говорят о двух версиях semver, которые «совместимы» друг с другом, они имеют в виду обратно совместимые изменения (minor и patch).
Диапазоны версий
Когда вы хотите указать зависимость, вы указываете её имя и диапазон версий в вашем package.json, как в одном из этих примеров:
{
"dependencies": {
"package-1": ">=2.0.0 <3.1.4",
"package-2": "^0.4.2",
"package-3": "~2.7.1"
}
} Вы заметите, что у нас есть несколько символов, отличных от версии. Эти символы, >=, <, ^, и ~, являются операторами и используются для указания диапазонов версий.
Цель диапазона версий — указать, какие версии зависимости будут работать с вашим кодом.
Операторы сравнения
Каждый диапазон версий состоит из операторов сравнения. Эти операторы — это просто оператор, за которым следует версия. Вот некоторые из основных операторов:
| Оператор | Описание |
|---|---|
<2.0.0 | Любая версия, которая меньше 2.0.0
|
<=3.1.4 | Любая версия, которая меньше или равна 3.1.4
|
>0.4.2 | Любая версия, которая больше 0.4.2
|
>=2.7.1 | Любая версия, которая больше или равна 2.7.1
|
=4.6.6 | Любая версия, которая равна 4.6.6
|
Примечание: Если оператор не указан, то
=подразумевается в диапазоне версий. Таким образом, оператор=фактически является необязательным.
Пересечения
Операторы сравнения могут быть соединены пробелами для создания набора операторов сравнения. Это создаёт пересечение включённых операторов сравнения. Например, набор операторов >=2.0.0 <3.1.4 означает «Больше или равно 2.0.0 и меньше 3.1.4».
Объединения
Полный диапазон версий может включать объединение нескольких наборов операторов сравнения, соединённых ||. Если удовлетворяется любое из условий объединения, то весь диапазон версий удовлетворяется. Например, диапазон версий <2.0.0 || >3.1.4 означает «Меньше 2.0.0 или больше 3.1.4».
Метки предварительных релизов
Версии также могут иметь метки предварительных релизов (например, 3.1.4-beta.2). Если оператор сравнения включает версию с меткой предварительного релиза, он будет соответствовать только версиям, имеющим ту же метку предварительного релиза версии.
Например, диапазон >=3.1.4-beta.2 будет соответствовать 3.1.4-beta.2 или 3.1.4-beta.12, но не будет соответствовать 3.1.5-beta.1 даже несмотря на то, что она технически «больше или равна» (>=) версии 3.1.4-beta.2.
Предварительные релизы, как правило, содержат случайные несовместимые изменения, и обычно вы не хотите сопоставлять предварительные релизы за пределами указанной вами версии, поэтому это поведение полезно.
Расширенные диапазоны версий
Диапазоны с дефисом
Диапазоны с дефисом (например, 2.0.0 - 3.1.4) указывают на включённый набор. Если часть версии опущена (например, 0.4 или 2), то они заполняются нулями.
| Диапазон версий | Расширенный диапазон версий |
|---|---|
2.0.0 - 3.1.4 | >=2.0.0 <=3.1.4 |
0.4 - 2 | >=0.4.0 <=2.0.0 |
Диапазоны X
Любой из X, x, или * может использоваться для оставления части или всей версии не указанной.
| Диапазон версий | Расширенный диапазон версий |
|---|---|
* |
>=0.0.0 (любая версия) |
2.x |
>=2.0.0 <3.0.0 (совпадение с основной версией) |
3.1.x |
>=3.1.0 <3.2.0 (совпадение с основной и второстепенной версиями) |
Если часть версии отсутствует, она предполагается как диапазон x.
| Диапазон версий | Расширенный диапазон версий |
|---|---|
| `` (пустая строка) |
* или >=0.0.0
|
2 |
2.x.x или >=2.0.0 <3.0.0
|
3.1 |
3.1.x или >=3.1.0 <3.2.0
|
Диапазоны с тильдой
Использование ~ со специфицированной второстепенной версией позволяет patch изменения. Использование ~ только с указанной основной версией позволит minor изменениям.
| Диапазон версий | Расширенный диапазон версий |
|---|---|
~3.1.4 | >=3.1.4 <3.2.0 |
~3.1 |
3.1.x или >=3.1.0 <3.2.0
|
~3 |
3.x или >=3.0.0 <4.0.0
|
Примечание: Указание предварительных релизов в диапазонах с тильдой будет соответствовать только предварительным релизам в той же полной версии. Например, диапазон версий
~3.1.4-beta.2будет соответствовать3.1.4-beta.4, но не3.1.5-beta.2, потому что версияmajor.minor.patchотличается.
Диапазоны с запятой
Разрешают изменения, которые не изменяют первую ненулевую цифру в версии, будь то 3 в 3.1.4 или 4 в 0.4.2.
| Диапазон версий | Расширенный диапазон версий |
|---|---|
^3.1.4 | >=3.1.4 <4.0.0 |
^0.4.2 | >=0.4.2 <0.5.0 |
^0.0.2 | >=0.0.2 <0.0.3 |
Примечание: По умолчанию при выполнении
yarn add [package-name]будет использоваться диапазон с запятой.
Если часть версии опущена, пропущенные части заполняются нулями. Однако они все равно позволят изменить это значение.
| Диапазон версий | Расширенный диапазон версий |
|---|---|
^0.0.x | >=0.0.0 <0.1.0 |
^0.0 | >=0.0.0 <0.1.0 |
^0.x | >=0.0.0 <1.0.0 |
^0 | >=0.0.0 <1.0.0 |
Дополнительные ресурсы
- Полное описание работы этой системы управления версиями см. в
node-semverREADME. - Опробуйте эту систему управления версиями на реальных пакетах, используя калькулятор npm semver.
© 2016–present Yarn Contributors
Licensed under the BSD License.
https://classic.yarnpkg.com/en/docs/dependency-versions