A Microsoft lançou no meio da semana passada o NuPack, um package manager para a plataforma .NET. Porque isso te importa? Vamos a algumas informações para você se posicionar.
Primeiro o básico: o que é um package manager? É um software que vai gerenciar suas dependências (packages), facilitando o trabalho com elas. Por exemplo, você quer adicionar uma referência à última versão estável do NHibernate, como você faz isso? Geralmente envolve verificar se a versão que você tem é a última, achar ela, atualizar se for o caso, adicionar a referência, etc… Um package manager facilita (muito) isso.
Pra entender o que um package manager pode fazer por você, veja o NuPack funcionando abaixo (segure o queixo):
Pra entender melhor, veja os posts do Scott Gu, do Scott Hanselman, do Phil Haack, a documentação online, e o post do Vinicius Quaiato (o único em português destes que listei). Vai ler lá, eu espero.
Agora que já nivelamos a discussão, vamos aos fatos mais interessantes.
De onde veio? A origem óbvia é o RubyGems, o de facto package manager do Ruby. Quem já usou sabe o quanto ele ajuda e o quanto é importante. Além do RubyGems, o projeto Nu (ou Nubular) é uma origem mais próxima, e originou o nome NuPack. O que é o Nu? Um package manager para .Net baseado em Ruby (incluindo IronRuby) e RubyGems, já bem avançado e fácil de usar. A Microsoft chamou o pessoal do Nu para trabalhar no NuPack, tirou a dependência do Ruby, lançou o CTP que tempos agora e abriu o código.
Quer ver o Nu funcionando? Segura o queixo (número 2):
O Nu vai continuar existindo por um tempo, mas acho que eventualmente tudo vai parar no NuPack e ele vai morrer. Veja aqui o Rob Reynolds , um dos caras que puxa o Nu e atuou no NuPack, discutindo o assunto online.
Porque isso tudo é importante? Por vários motivos. Vamos a eles.
- Facilita muito o gerencialmento de todas as dependências de um projeto;
- Tudo é versionado e compartilhado pelo time;
- Vai ser mais fácil trabalhar com dependências open source;
- Vai ser mais fácil trabalhar com dependências não open source;
- As empresas podem criar um catálogo de dependências homologadas e controlar isso fácil: um simples share de rede pode funcionar como um repositório de pacotes;
- Vai estimular a criação de projetos open source no meio de .NET, algo que já cresce muito rapidamente.
Algumas curiosidades interessantes:
- Este parece ser o primeiro projeto verdadeiramente open source da Microsoft, aceitando facilmente contribuições da comunidade. O código está no Codeplex e eles estão chamando todos a contribuir (ainda que o IronRuby também aceite, parece que não é tão simples);
- O repositório do Codeplex está usando Mercurial, não TFS;
- Todos os exemplos da internet usam o tal do ELMAH como exemplo, o que torna as demos repetitivas;
- O número de pacotes que está no repositório atual está crescendo;
- O repositório atual é temporário, e ainda não aceita contribuições (veja o feed aqui).
O NuPack foi feito para trabalhar diretamente ligado ao Visual Studio. Isso traz prós e contras. Como pró, permite fazer todo tipo de alterações no VS e no projeto durante a instalação de um pacote, o limite é o céu, já que o objeto DTE do VS, que permite a manipulação do VS, está exposto ao package manager. Por outro lado, não dá pra rodar ele fora do VS, ou seja, estou preso e o suporte ao mono já era, já que não tem Visual Studio no Linux/Mac. Eu gosto da ideia de poder trabalhar independente do VS de vez em quando e estou impossibilitado de usar NuPack dessa forma.
Já o fato de o NuPack usar linha de comando com Powershell (ainda que dentro do VS) é o máximo. Já passou da hora dos desenvolvedores de .NET aprenderem a usar a linha de comando.
Um problema que deve ser resolvido é que o NuPack ainda não faz um cache local na máquina. Assim, se no projeto A eu precisar baixar o NHibernate, e logo em seguida quiser instalar o NH no projeto B que está em outra solution, vou ter que baixar tudo de novo. Comprovei isso fazendo um sniff na rede, e ele realmente baixa tudo de novo. Imagino que isso vai ser resolvido nas próximas versões.
O que já temos de mais importante no primeiro CTP do NuPack:
- Baixar e instalar um pacote no Visual Studio;
- Remover um pacote;
- Atualizar um pacote pra uma versão atual;
O que ainda não está lá:
- Atualizar todos os pacotes (ainda que você faça isso com um pipe);
- Especificar que você quer um pacote beta (algo como Add-Package NHibernate –pre, igual o RubyGems oferece)
- Instalar documentação e referências de uso;
- Verificação das instalações já feitas para ver se alguma está quebrada.
Vejam o que já está lá nas referências de comandos online.
Recomendo que vocês verifiquem esta grande novidade, a ideia vai pegar muito forte, e é algo extremamente útil. Este vai ser o package manager padrão da plataforma toda. Quem sabe ele não influencia um gerenciador de pacotes oficial para o Windows, algo no estilo apt-get/synaptics do Linux. Sem dúvida é algo que faz falta.
Para instalar é fácil: baixe online, ou instale o ASP.Net MVC 3 Beta, já que ele já vem junto. Divirta-se.
Giovanni Bassi
Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.