DEV Community

Aline Bezzoco
Aline Bezzoco

Posted on

Como resolver problemas de versionamento dos pacotes no Lerna

Um problema que pode se tornar muito comum é conflitos de versionamento do Lerna. Vamos a um exemplo:

Você tem uma lib (biblioteca) onde duas pessoas desenvolvedoras fazem a manutenção do mesmo, porém numa última atualização aconteceu de um dev sem querer rodar o lerna publish direto de uma branch local e não na main (branch principal) como é mais comum. Acontece é que um tempo depois você também precisa atualizar o pacote e quando tenta na branch principal (que seria o correto), dá um erro informando que a versão a ser atualizada é bem diferente da atual. Mas por que isso acontece? Porque a última branch que foi feita a atualização lançou uma versão X enquanto a outra está com uma versão totalmente defasada (quando atualizamos o pacote com o lerna o mesmo atualiza os package.json e o lerna.json. A "solução" seria fazer um novo merge com as infos do pacote atualizadas para a última versão, porém muitas das vezes acontece da branch ser deletada minutos depois que é feito o merge na branch principal (eu particularmente não gosto de fazer dessa forma).

A vantagem é que o Lerna possui uma opção chamada "Custom Version", ou seja, você mesmo pode atribuir a versão que quer para o seu pacote (use com sabedoria). Uma forma mais rápida e segura de resolver os problemas de versionamento que podem ocorrer.

Quando você rodar o lerna publish no terminal irá aparecer essas seguintes opções:

Print da tela de um terminal com as opções de versão do pacote com a opção do custom version

Basta selecionar o "Custom Version" e e aí é só digitar a tag a versão que você quer. Depois disso é seguir o restante do procedimento padrão de publicação de pacotes do Lerna :)


Para finalizar, uma observação: claro que o cenário ideal seria a automação do publish através do CI e afins, mas existe também um outro cenário da atualização dos pacotes de forma manual. Então a solução seria para esses casos, beleza?

Então é isso. Até a próxima!

Discussion (0)