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

Jessilyneh @jessilyneh

About: Arq. de Software | ela/a Ultimamente não estou conseguindo tempo para escrever artigos novos mas, saibam que estou bem e não tenho novidades.

Location:
São Paulo
Joined:
May 21, 2019

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

Publish Date: Mar 9 '23
43 10

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

Comments 10 total

  • Eduardo Oliveira
    Eduardo OliveiraMar 9, 2023

    Obrigadoo! muito esclarecedor!

    • Jessilyneh
      JessilynehMar 9, 2023

      Ah, obrigada e fico muito feliz que foi util

  • Matheus Lubarino
    Matheus LubarinoMar 10, 2023

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

    • Jessilyneh
      JessilynehMar 13, 2023

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

  • Douglas Fernandes
    Douglas FernandesMar 11, 2023

    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.

    • Jessilyneh
      JessilynehMar 13, 2023

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

  • Jean Jacques Barros
    Jean Jacques BarrosMar 13, 2023

    Muito bom o artigo! Parabéns!

  • Cleber Soares
    Cleber SoaresMar 14, 2023

    Artigo excelente !!

Add comment