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.0ou posteriores. Se você definir^1.13.0, ao rodarnpm update, ele pode atualizar para1.13.1,1.14.0e assim por diante, mas não para2.0.0ou posterior.~: se você definir~0.13.0, ao rodarnpm updateele pode atualizar para versões patch:0.13.1está ok, mas0.14.0nã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