Semantic Versioning com npm
Se há uma coisa incrível nos pacotes Node.js, é que todos eles permitem utilizar Versionamento Semântico em suas numerações de versão.
O Versionamento Semântico é um conceito simples: todas versões têm 3 digitos: x.y.z
.
- o primeiro digito é a versão major
- o segundo digito é a versão minor
- o terceiro digito é a versão patch
Quando você cria uma nova versão, você não aumenta um número como bem entender, existem algumas regras:
- você aumenta a versão major quando você cria mudanças de API incompatíveis
- você aumenta a versão minor quando você adiciona uma funcionalidade compatível com versões anteriores
- você aumenta a versão patch quando você arruma bugs sem quebrar versões anteriores
Essa convenção é adotada em todas linguagens de programação, e é muito importante que todo pacote npm
a siga, pois o sistema como um todo depende disso.
Por que isso é tão importante?
Porque o npm
define algumas regras que podemos usar no package.json
para escolher quais versões podem ser atualizadas ao rodar npm update
.
As regras utilizam esses símbolos:
^
~
>
>=
<
<=
=
-
||
Vamos ver essas regras em detalhes:
^
: Só vai fazer atualizações que não alterem o número mais a esquerda diferente de zero. Se você definir^0.13.0
, ao rodarnpm update
, ele pode atualizar para0.13.1
,0.13.2
, e assim por diante, mas não para0.14.0
ou posteriores. Se você definir^1.13.0
, ao rodarnpm update
, ele pode atualizar para1.13.1
,1.14.0
e assim por diante, mas não para2.0.0
ou posterior.~
: se você definir~0.13.0
, ao rodarnpm update
ele pode atualizar para versões patch:0.13.1
está ok, mas0.14.0
não está.>
: aceita qualquer versão maior que a especificada>=
: aceita qualquer versão maior ou igual a especificada<=
: aceita qualquer versão menor ou igual a especificada<
: aceita qualquer versão menor que a especificada=
: aceita aquela exata versão-
: aceita qualquer versão dentro de um intervalo. Exemplo:2.1.0 - 2.6.2
||
: combina restrições. Exemplo:< 2.1 || > 2.6
Você pode combinar algumas dessas notações, por exemplo, utilize 1.0.0 || >=1.1.0 <1.2.0
para usar 1.0.0 ou uma versão maior ou igual a 1.1.0, porém menor que 1.2.0.
Também há outras regras:
- sem símbolo: aceita apenas a versão especificada (
1.2.1
) latest
: usa a versão mais recente disponível