Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Administrar diversos projetos

Me deparei com o seguinte problema tentei excluir a pasta de um projeto que continha a pasta node_modules com todos meus plugins e não consegui realizar a exclusão pois existem arquivos com o nome muito longo, mas até ai eu resolvo com algum software. O que eu estava tentando fazer era copiar a estrutura do projeto que eu tinha e acabei copiando o projeto errado. Mas finalmente a minha duvida é, se eu possuir 100 projetos eu vou precisar ter instalado e rodando 100 pastas node_modules, com cada plugin instalado 100 vezes ?...talvez a solução seja simples mas a algum tempo venho pensando nisso e não cheguei a uma conclusão, você pode me ajudar ?

3 respostas
solução!

Cada projeto tem sua pasta node_modules, sendo assim, você precisará instalar os plugins para cada projeto. Se você gravou todos os plugins/modulos em package.json basta rodar:

npm install

Daí ele baixará todos os módulos listados em seu arquivo, não precisa ir baixando cada plugin individual manualmente.

Agora vamos a parte "quente da sua pergunta". Preparado?

Em um primeiro momento você deve estar se fazendo essa pergunta: "Flávio, eu vou ter um monte de coisa repetida por projeto, eu queria arrumar um jeito de ter um um único lugar esses módulos e todas as minhas aplicações lerem desse lugar".

É por aí? Se for.. vamos continuar a conversa....

Bom, todo projeto possui dependências e a alteração da dependência de um projeto não deve influenciar outro. Imagine 100 aplicações e você consiga o que quer, ter as dependências em um único lugar e utilizá-las.

Daí, uma atualização de uma dependência (módulo) tem um recurso que resolveria um problemão em um dos seus projetos. Quando você dar update nela, não é apenas aquele projeto que será influenciado, todos os outros. É isso que você deseja, certo? Mas....

Você foi pego de surpresa! Outros projetos que usavam esse módulo começaram a apresentar problemas. Esses projetos usavam um recurso do módulo que funcionava antes, mas agora quebrou por algum motivo que você desconhece. Aquela aplicação atualizada, funcionou porque não usava o recurso que está bugado. Seus projetos inteiros começam a ficar imprevisíveis... bem-vindo à "krakatoa o inferno de java" (nome de um filme).

O que o Node.js fez muito sabiamente foi deixar que cada projeto tenha suas dependências, sendo assim, qualquer alteração na dependência de um projeto não impacta em outro. Uma conseqüência disso é o uso no disco e o tempo para baixar as dependências. Aí eu te pergunto: o problema que essa abordagem resolve justifica esse uso de espaço em disco e download?

Imagine a Petrobrás com zilhões de sistemas. Imagine atualizar um módulo correndo o risco de quebrar zihões de outros projetos?

Ok, pode ser que eu não tenha te convencido, tudo bem, você não precisa ser carbono de mim, isto é, uma cópia e quer pagar pra ver porque é um cara corajoso!

Neste caso, você pode instalar dependências globais (lembra que em programação tudo que é global vem dos "infernos?").

Para isso, basta instalar a dependência com -g. Um exemplo:

npm install usemin --save-dev -g

Eu não faço isso a tanto tempo, mas a ideia é que todos os seus projetos achem essa dependência global (acho que nem mais funciona assim.. tem que testar).

Resumindo Icaro, compartilhei minha experiência com você, agora é você ver se faz sentido. Espero ter ajudado!

No curso de Grunt eu ensino a instalar o Grunt global, depois, no curso de Gulp, eu nem mostro como instalar Global e só ensino por projeto mesmo.

Hehehe muito obrigado me convenceu sim, eu não havia pensado dessa forma e de fato acaba perdendo o controle real de cada projeto.

Muito obrigado. Abraços.

Ótimo! Agora é continuar com o treinamento e chegar até o fim. Se nesse caminho pintar uma dúvida, não deixe de postar. É preferível resolvê-la do que ficar com aquela "dúvida mortal".

Bom estudo Ícaro!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software