DEV Community

Jessilyneh
Jessilyneh

Posted on

O que os símbolos(~) e (^) representam nas dependências de projetos?

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"
      },
Enter fullscreen mode Exit fullscreen mode

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:

Tabela de significado de símbolos citados no texto
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

Oldest comments (10)

Collapse
 
eduardojm profile image
Eduardo Oliveira

Obrigadoo! muito esclarecedor!

Collapse
 
jessilyneh profile image
Jessilyneh

Ah, obrigada e fico muito feliz que foi util

Collapse
 
lubarinobr profile image
Matheus Lubarino

Muito obrigado, por mais que uso o package.json com certa frequência nunca tinha parado para pensar para que isso servia, muito obrigado.

Collapse
 
jessilyneh profile image
Jessilyneh

Ah, que bom :D Eu que agradeço!

Collapse
 
douglasffilho profile image
Douglas Fernandes

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.

Collapse
 
jessilyneh profile image
Jessilyneh

Sim! É um assunto que eu tenho visto muito no trabalho e, até por isso, escrevi sobre. Fico muito feliz que foi util :D

Collapse
 
jjeanjacques10 profile image
Jean Jacques Barros

Muito bom o artigo! Parabéns!

Collapse
 
jessilyneh profile image
Jessilyneh

Ah, muito obrigada :D

Collapse
 
cleber_soares profile image
Cleber Soares

Artigo excelente !!

Collapse
 
jessilyneh profile image
Jessilyneh

muito obrigada :D