Pub Get vs Pub Upgrade — Descomplicar o que já é descomplicado!

Igor L Sambo💙🇲🇿
GDG Maputo
Published in
4 min readJun 9, 2020

Este artigo aborda dois conceitos bastante simples, porém geram alguma confusão e são usados quando não é necessário (como eu rsrsrs)…!

No caso são as acções do pub get e o pub upgrade que servem para “resolver” as dependências que nós queremos em nosso projecto, e é isso! Obrigado…

Mas como funcionam?

Pub Get

Pub Get, na primeira vez que a dependência é adicionada ao projecto vai baixar e instalar a última versão disponível ou a que será indicada, se esta for indicada no pubspec.yaml.

dep1: 
dep1: ^0.1.0

O que ele faz é simplesmente pegar nessa versão, de seguida é criado um ficheiro pubspec.lock (geralmente bem em cima do .yaml) e ele faz o lock pra versões a que este pode ser feito o upgrade (assumindo que lhe é adicionado o “^”) — ele pode fazer o upgrade para “versões menores/pequenas” deste pacote.

Pub Upgrade

O Pub Upgrade permite sempre que existir uma “versão menor” desse pacote disponível para download, fazer o mesmo e instalar (get🙃), e actualiza então o pubspec.lock. Mas então, o que ele não faz??? Ele não vai dar a próxima versão desse pacote, aí a gente faz manualmente ou deixa vazio que ele sempre vai à última. Imaginemos pra nossa dep1, tem as seguintes versões:

[há uma semana] dep1: 0.1.0
[2 dias atrás] dep1: 0.1.1
[hoje] dep1: 0.2.0

E nós não actualizamos o pubspec.yaml desde a semana passada, temos assim no pubspec.yaml

 dep1: ^0.1.0

O que vai acontecer ao correr o flutter pub upgrade é que ele vai buscar e instalar o 0.1.1 — note que deve ter o “^” para que isso aconteça automaticamente e essa mudança pode ser notada no pubspec.lock que é onde a versão do pacote é armazenada.

E como chegamos à versão 0.2.0?
Para termos a próxima versão do nosso pacote é necessário colocar manualmente, aí estaremos a escutar a “versões menores” da 0.2.0

Pub Outdated (Bónus)

Até podemos ir aos repositórios e ver quais pacotes/bibliotecas foram actualizadas e modificar no nosso projecto, mas e se for um projecto com muitas dependências?

Como o meu 😅😅😅😅😅😅😅

É onde entra a mais nova funcionalidade do Dart 2.28 que vem com o Flutter 1.17, o pub outdated, como é referenciado na documentação do dart ele permite “escutar” para que versões o pacote pode ser actualizado (upgradable), para que pacotes este pode ser resolvido (resolvable) e indica ainda a última versão do mesmo (latest), ou seja combina o pubspec.lock e as informações vindo do pub.dev das dezenas de bibliotecas no teu (meu, na verdade) projecto e temos uma ideia clara do que pode ser feito das mesmas e sem sair do IDE (ou VsCode rsrsrs).

Resultado do pub outdated (parcial)

Conclusão

O pub get vai te manter com a versão armazenada no pubspec.lock depois que esta for instalada, pub upgrade vai buscar mais actualizações referentes a “versões menores” e as versões maiores apenas são acedidas de forma manual, contudo, é possível controlar que mudanças podem ser executadas por meio do pub outdated.

Recomendação

Apenas uma recomendação, antes de recorrer para actualizações, leiam sobre as mudanças e tenham certeza que realmente é realmente necessário fazê-lo. Aliado a isso, as vezes, manter uma versão antiga implica mudar algumas dependências no próprio pacote na nossa máquina, isso significa que terá de ser tua responsabilidade manter essa versão na tua máquina (como dependências do gradle no caso do android).

NOTA: Com versões menores não quero dizer anteriores mas sim a versões que por sim não representam uma mudança significativa, no projecto. Mais aqui

Espero que tenha aprendido com este artigo e que se tenha divertido enquanto lia. Comente sobre mais algum ponto que gostaria de saber ou acrescentar a este tema!

Obrigado por acompanhar até ao fim e espero por você nos próximos artigos.

Para questões e sugestões esteja a vontade para tal nos comentários, email igorlsambo1999@gmail.com ou twitter @lsambo02.

Obrigado e até ao próximo artigo!!!

--

--