É possível uma arquitetura de nodes_modules limpa?

Este artigo é um convite para experimentos e discussão. Atualmente estou pesquisando para ver o que poderia ser feito para melhorar a estrutura dos nodes_modules instalados em um projeto. Ainda sou inexperiente nesta área, por isso seja indulgente se cometer um erro e, acima de tudo, não hesite em me corrigir ou em retornar na seção de comentários, terei prazer em discutir/debater com todos.
[tipo de separador=”” tamanho=”” ícone=”estrela”]

Explicações
[linha] [um_terço] Kiik
[/one_third] [two_third] Para apagar minhas falhas nesse assunto, mergulhei na instalação de nodes_modules para um dos meus projetos que era trabalhar com gulp.
Se você está familiarizado com tudo isso, provavelmente já sabe muito do que está por vir.
Para outros, você deve saber que ao instalar uma dependência via npm em um projeto, ele buscará automaticamente as dependências de que precisa (porque sim, as dependências às vezes também têm dependências).
[/two_third] [/row] E é um coisa muito boa, pois dessa forma o desenvolvedor não precisa ter um conhecimento enciclopédico de cada plugin. Caso contrário, teríamos que saber, por assim dizer, de cor todas as dependências necessárias para cada plugin, ou então teríamos que ir buscar a informação online cada vez que quiséssemos instalar uma dependência. Não é viável no dia a dia.
[tipo de separador=”” tamanho=”” ícone=”estrela”]
o problema

Embora a instalação automática de dependências seja um recurso obrigatório, não tenho certeza de que a estrutura resultante seja a ideal.
Por exemplo, é assim que a arquitetura do plugin se parece bússola, com tudo o que precisa para funcionar:
plugin-gulp-exemplo
Isso é um monte de vícios! Já imaginou se você tivesse que saber tudo isso de cor e instalá-los um por um? Concordamos, não é possível.
No entanto, observe a estrutura. Olha o que acontece. As dependências de bússola também precisa de dependências. E às vezes os mesmos são necessários. Eu usei cores para torná-lo mais óbvio.

Matryoshka

Sim, de fato, você acaba com uma arquitetura de boneca aninhada, quase infinita às vezes, onde cada plugin gulp contém sua pasta nodes_modules com suas dependências, então outros plugins gulp, que contêm pastas nodes_modules com dependências e assim por diante … exemplo de plug-in bússola.
100421_0015
Francamente, acho que temos um grande problema aqui.
Se eu continuar com o exemplo de bússola, e eu escolho a dependência 'through2', você verá que ela está na raiz do plugin gulp-compass, mas também é encontrada nas dependências do gulp-util, que é uma das dependências do gulp -compass. Dor de cabeça ? Eu também.
Não faz sentido porque a dependência já está fornecida no plugin gulp-compass, mas a dependência gulp-util irá procurá-la novamente porque precisa que funcione... estamos andando de cabeça para baixo.
Então, sim, funciona como está, por que se preocupar... exceto que não funciona.
[tipo de separador=”” tamanho=”” ícone=”estrela”]

A Microsoft é...

Em máquinas Windows, isso causa bugs porque os endereços dos arquivos são muito longos. (Veja a discussão no Github).
[linha] [dois_terceiros]

Certamente chegar a um arquivo que está em uma pasta, que está em outra pasta, que ainda está em outra pasta, que está parado! em outra pasta, que ainda é!!!!! em outra pasta (sic…) pode se tornar cansativo, mesmo para um computador.
Então você vai me dizer que a Microsoft está toda podre e que você tem que usar o Mac.
Confesso que prefiro o Mac também, mas não acho que isso justifique tal arquitetura... e sou da opinião que deve funcionar para todos, sem ter que limpar tudo na mão.

[/two_third] [one_third] 1024px-Russo-Matroshka_no_bg
[/one_third] [/row] [tipo de separador=”” tamanho=”” ícone=”estrela”]
NPM próximo nível

Pode parecer pretensioso, já que sou iniciante, mas acho que devemos evoluir as dependências para um funcionamento mais otimizado.
Não seria mais sensato mudar a maneira como esses plugins funcionam, para que eles verifiquem na pasta nodes_modules se as dependências de que precisam já estão presentes, atualize-as se necessário, instale-as se estiverem ausentes, mas ainda na raiz da pasta nodes_modules original? De repente, teríamos uma "árvore de dependências plana" como sugerido pelo meu colega Logu.
Então a discussão está aberta. Não hesite em partilhar a sua experiência, ou dar a sua opinião. Espero poder reescrever um artigo sobre este assunto com soluções reais.
Emmanuelle GUYOT / Cientista UX