Versões das dependências
Versionamento semântico
Pacotes no Yarn seguem Versionamento Semântico, também conhecido como “semver”. Quando você instala um novo pacote do registro, ele será adicionado em seu arquivo package.json
com um intervalo de versão semver.
Essas versões são decompostas em major.minor.patch
e parece com um desses: 3.14.1
, 0.42.0
, 2.7.18
. Cada parte da versão é incrementada em vários momentos:
- Incremente
major
quando você faz uma mudança que quebra ou torna incompatível a API de um pacote. - Incremente
minor
quando você adicionar novas funcionalidades enquanto permanece compatível com versões anteriores - Incremente
minor
quando você adicionar correções de erros enquanto permanece compatível com versões anteriores
Nota: Por vezes, há também “rótulos” ou “extensões” para o formato de semver que marcam coisas como versões pré-lançamento ou betas (por exemplo,
2.0.0-beta.3
)
Quando os desenvolvedores falam sobre duas versões de semver sendo “compatíveis” uma com a outra, eles estão se referindo às mudanças compatível com versões anteriores (minor
e patch
).
Intervalos de versão
Quando você quer especificar uma dependência, especifique o nome e o intervalo de versão no seu arquivo package.json
como um desses:
{
"dependencies": {
"package-1": ">=2.0.0 <3.1.4",
"package-2": "^0.4.2",
"package-3": "~2.7.1"
}
}
Você notará que temos um monte de caracteres separados da versão. Esses caracteres, >=
, <
, ^
, e ~
, são operadores e são usados para especificar os intervalos de versão.
O propósito de um intervalo de versão é para especificar quais versões de uma dependência irão funcionar para o seu código.
Comparadores
Cada alcance de versão é composto de comparadores. Estes comparadores são simplesmente um operador seguido por uma versão. Aqui estão alguns dos operadores básicos:
Comparador | Descrição |
---|---|
<2.0.0 |
Qualquer versão que seja menor que 2.0.0 |
<=3.1.4 |
Qualquer versão que seja menor ou igual a 3.1.4 |
>0.4.2 |
Qualquer versão que seja maior que 0.4.2 |
>=2.7.1 |
Qualquer versão que seja maior ou igual a 2.7.1 |
=4.6.6 |
Qualquer versão que seja igual a 4.6.6 |
Nota: se nenhum operador for especificado, então é assumido
=
no intervalo de versão. Então, o operador de=
é efetivamente opcional.
Interseções
Comparadores podem ser unidos por espaço em branco para criar um conjunto de comparador. Isso cria uma interseção entre os comparadores inclusos. Por exemplo, o comparador >=2.0.0 <3.1.4
significa “Maior ou igual a 2.0.0
e menor que 3.1.4"
.
Uniões
Um intervalo de versão completo pode incluir uma união de vários conjuntos de comparadores unidos por ||
. Se qualquer dos lados da união for satisfeito, então todo o intervalo de versão é satisfeito. Por exemplo, o intervalo de versão <2.0.0 || >3.1.4
significa “Menor que 2.0.0
ou maior que 3.1.4"
.
Tags de pré-lançamento
Versões também podem ter tags de pré-lançamento (ex. 3.1.4-beta.2
). Se um comparador inclui uma versão com uma tag de pré-lançamento, só irá corresponder às versões que tenham a mesma versão major.minor.patch
.
Por exemplo, o intervalo >=3.1.4-beta.2
corresponderia a 3.1.4-beta.2
ou 3.1.4-beta.12
, mas não corresponderia a 3.1.5-beta.1
, mesmo que seja tecnicamente “maior ou igual a” (>=
) a versão de 3.1.4-beta.2
.
Pré-lançamentos tendem a conter alterações que quebram o pacote, e normalmente você não quer corresponder com pré-lançamentos fora da versão que você especificou, então esse comportamento é útil.
Intervalos de versão avançados
Intervalos de Hífen
Intervalos de hífen (ex. 2.0.0 - 3.1.4
) especificam um conjunto inclusivo. Se parte da versão é deixado de fora (ex. 0.4
ou 2
), eles são preenchidos com zeros.
Intervalo de versão | Intervalo de versão expandido |
---|---|
2.0.0 - 3.1.4 |
>=2.0.0 <=3.1.4 |
0.4 - 2 |
>=0.4.0 <=2.0.0 |
Intervalos-X
Qualquer um desses, X
, x
ou *
, pode ser usado para deixar parte ou toda uma versão não especificada.
Intervalo de versão | Intervalo de versão expandido |
---|---|
* |
>=0.0.0 (qualquer versão) |
2.x |
>=2.0.0 <3.0.0 (corresponde com a versão major) |
3.1.x |
>=3.1.0 <3.2.0 (corresponde com as versões major e minor) |
Se parte de uma versão é omitido, presume-se ser um intervalo-x.
Intervalo de versão | Intervalo de versão expandido |
---|---|
`` (string vazia) | * or >=0.0.0 |
2 |
2.x.x ou >=2.0.0 <3.0.0 |
3.1 |
3.1.x ou >=3.1.0 <3.2.0 |
Intervalo de til (~)
Usar ~
com uma versão minor especificada permite alterações de patch
. Usar ~
com versão major especificada permitirá mudanças minor
.
Intervalo de versão | Intervalo de versão expandido |
---|---|
~3.1.4 |
>=3.1.4 <3.2.0 |
~3.1 |
3.1.x ou >=3.1.0 <3.2.0 |
~3 |
3.x ou >=3.0.0 <4.0.0 |
Nota: Especificar pré-lançamentos em intervalos de til corresponderá somente pré-lançamentos na mesma versão completa. Por exemplo, o intervalo de versão
~3.1.4-beta.2
corresponderia com3.1.4-beta.4
mas não com3.1.5-beta.2
porque a versãomajor.minor.patch
é diferente.
Intervalos de acento circunflexo
Permite alterações que não modificam o primeiro dígito diferente de zero na versão, tanto o 3
em 3.1.4
ou o 4
em 0.4.2
.
Intervalo de versão | Intervalo de versão expandido |
---|---|
^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 |
Nota: Por padrão quando você executa
yarn add [package-name]
ele usará um intervalo de acento circunflexo.
Se parte da versão é deixado de fora, as partes que faltam são preenchidas com zeros. No entanto, eles ainda permitirão que esse valor seja alterado.
Intervalo de versão | Intervalo de versão expandido |
---|---|
^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 |
Mais recursos
- Para uma especificação completa de como funciona esse sistema de controle de versão, consulte o README
do node-semver
. - Teste este sistema de controle de versão em pacotes usando o npm semver calculator.