Em português: (~) til e (^) circunflexo. Em inglês, (~) tilde e (^) caret. Você pode continuar chamando esses símbolos pelo apelido carinhoso (minhoquinha e chapeuzinho) mas agora já sabe os nomes técnicos.
Uso dos símbolos ^ e ~
Em arquivos package.json, package-lock.json ou outro que especifique dependências, você pode encontrar os símbolos de ^ e ~ antes do range (intervalo) de versão:
"dependencies": {
"basic-auth": "^2.0.1",
"chalk": "^4.1.2",
"corser": "^2.0.1",
"he": "^1.2.0",
"html-encoding-sniffer": "^3.0.0",
"http-proxy": "^1.18.1",
"mime": "^1.6.0",
"minimist": "^1.2.6",
"opener": "^1.5.1",
"portfinder": "^1.0.28",
"secure-compare": "3.0.1",
"union": "~1.5.0",
"url-join": "^4.0.1"
},
Entenda cada parte:
(~) ou (^) especificam os intervalos de versão
(~) “aproximadamente equivalente à versão”
(^) “compatível com a versão”
X.Y.Z (major.minor.patch), juntos nesta ordem e formato, indicam o número de versão. Individualmente, Z, Y e Z são identificadores de versão
major (maior), minor (minor) e patch (correção) são categorias de numero de versão
^X.Y.Z ou ~X.Y.Z juntos nesta ordem e formato, formam ranges de versão
Ranges de versão especificam quais intervalos (de A até B, exceto B) de versões de uma dependência funcionarão no projeto.
Aproximadamente equivalente à versão(~) como em "union": "~1.5.0"
, permite alterações do identificador de patch se uma versão no identificador minor corresponder ao especificado no comparador.
Em "union": "~1.5.0"
, ~ permite versões de 1.5.0
até 1.5.99
mas não inclui 1.6.0
. As versões major e minor devem corresponder ao valor do identificador especificado, mas qualquer versão de patch maior ou igual à especificada é válida.
Compatível com a versão (^) permite alterações que não modifiquem o identificador que esteja mais à esquerda, aceitando atualizações minor e de patch para as versões 1.0.0
e superiores. Para versões que modificam apenas o patch, por exemplo ^0.0.1
o range permitido seria >=0.0.1 <0.0.2
, já que não podemos modificar o valor mais à esquerda, o 1
.
Em "url-join: "^4.0.1"
o identificador mais à esquerda é o major. Qualquer versão minor ou de patch que seja maior ou igual ao especificado é válida. O ^ permitiria versões até 4.99.99
por exemplo mas, não permitira 5.0.0
porque o 4
é o dígito mais a esquerda em "^4.0.1"
.
Ilustrando o que foi dito:
Print retirado de https://devhints.io/semver em 07/03/2023 |
Links para se aprofundar nos assuntos:
Comparadores
Comparador de versões avançado
Diferença entre build, version e release
Diferença entre til e circunflexo
Major, minor e patch
Range de versões
Versão de software
Versionamento
Top comments (10)
Muito bom o artigo! Parabéns!
Ah, muito obrigada :D
Semver é uma assunto muito interessante e, na prática, facilita muito a remoção de entraves na coexistência de codependencias com seus dependentes. Amei o artigo.
Sim! É um assunto que eu tenho visto muito no trabalho e, até por isso, escrevi sobre. Fico muito feliz que foi util :D
Artigo excelente !!
muito obrigada :D
Muito obrigado, por mais que uso o package.json com certa frequência nunca tinha parado para pensar para que isso servia, muito obrigado.
Ah, que bom :D Eu que agradeço!
Obrigadoo! muito esclarecedor!
Ah, obrigada e fico muito feliz que foi util