Ao longo dos anos, houve uma grande evolução no desenvolvimento das aplicações. Algo muito comum há vinte anos, hoje é impraticável. No passado, quando era preciso, por exemplo, acessar um banco de dados, o desenvolvedor programava todos os aspectos desta conexão ou copiava (basicamente um copy-paste) de alguém que já implementou isso.
Esta dinâmica de “copiar-colar” o código, evoluiu para a “copia” de pacotes. No lugar de copiar o código fonte diretamente, o desenvolvedor passou a obter pacotes que continham os códigos que necessitava, como para o acesso ao banco. Esses pacotes eram adicionados manualmente no projeto que estivesse desenvolvendo.
O problema desde cenário é que se um pacote copiado fosse alterado, por qualquer motivo, o desenvolvedor precisaria repetir todo o procedimento de adição do pacote no projeto. Claro que também precisava ficar atento para saber se o pacote foi alterado ou não.
Com o tempo, os pacotes passaram a serem mais utilizados, o que tornou este gerenciamento manual impraticável. Vindo ao resgaste disso, surgiram os gerenciadores de pacotes, também chamados de gerenciador de dependências. Essas ferramentas realizam automaticamente os procedimentos que os desenvolvedores faziam manualmente. Delegando o gerenciamento dos pacotes de um projeto, o desenvolvedor pode focar no que é mais importante, o desenvolvimento da aplicação que está criando.
Curso Npm - Gerenciador de pacotes para JavaScript
Conhecer o cursoMas o meu projeto é pequeno, preciso de um gerenciador de dependência?
Durante a criação de uma aplicação, não importa qual seja o seu tamanho, pacotes são adicionados para agilizar o desenvolvimento, mantê-la coesa e evitar a “reinvenção da roda”. Porque criar algo do zero, se outro desenvolvedor já implementou o mesmo procedimento?
Mesmo havendo a possibilidade de adicionar um pacote manualmente, este também pode fazer uso de outro pacote. Neste cenário, trabalhando de maneira manual, mesmo requerendo apenas um pacote, o desenvolvedor precisará se preocupar com dois.
Entretanto, não há garantias que será apenas uma dependência. O segundo pacote pode necessitar de outros e assim por diante, gerindo um complexo grafo de dependências.
Logo vemos que o projeto possui muitas dependências, o que não é ruim, mas gerencia-las manualmente se torna complicado ou mesmo impossível:
É neste momento que os gerenciadores de dependências são imprescindíveis. Eles gerenciam todas as ações com relação as dependências do projeto: listagem, adição, remoção e atualização. Além de analisar o grafo de dependência e garantir que as dependências dos pacotes utilizados no projeto também sejam obtidas.
Principais gerenciadores de dependência
Atualmente qualquer plataforma de desenvolvimento que se preze possui uma ferramenta que permite a criação, compartilhamento e consumo de códigos entre os desenvolvedores.
Existem várias que se encontram neste quesito, entre as mais populações temos:
- NPM: Para aplicações web e JavaScript;
- Yarn: Para aplicações web e JavaScript;
- Composer: Para aplicações PHP;
- Maven: Para aplicações Java e Kotlin;
- Gradle: Para aplicações Java, Groovy, Kotlin, Android, Scala e JavaScript;
- NuGet: Para aplicações .NET;
- Pip: Para aplicações Python;
- Rubygem: Para aplicações Ruby;
- Mix: Para aplicações Elixir;
- Hex: Para aplicações Erlang;
- Cargo: Para aplicações Rust;
- PEAR Installer: Para aplicações PHP;
- CPAN: Para aplicações Pear.
Cada gerenciador de dependências possui suas particularidades, mas todos facilitam a vida do desenvolvedor, então saber utilizá-los é algo essencial atualmente. Aqui no nosso blog, já abordamos o Yarn, PIP, NPM e NuGet.
Curso PHP - Gerenciador de dependências Composer
Conhecer o cursoDevemos abordar os outros gerenciadores em artigos futuros, então fique de olho nas nossas publicações aqui do blog.