As dependências do Node.js pesam muito

9

Recentemente comecei a brincar com o node.js.

Agora, todos os tutoriais de nós afirmam que você deve começar com

npm init

e então, diga que você quer alguma estrutura de servidor padrão, diga que escolhe express:

npm install express

mas você precisará de muitas outras coisas com as quais está acostumado de mundos como o ASP.NET.

Eu falo sobre mecanismos de modelo (jade) e pré-processadores de folha de estilo (SASS).

E então eles dizem "instale o gulp / grunt! Para que você possa minificar e uglificar e executar o servidor e muitas outras coisas automaticamente!"

E isso significa instalar gulp, node-sass, e gulp-sass e gulp-uglify, e talvez mais coisas realmente legais (tsd ou babel, markdown etc) ...

Mas tudo isso é pesado no seu disco e projeto. Não espere um momento e você pode facilmente encontrar 100 MB de tamanho de disco para esse projeto (que ainda nem começou!), Sem mencionar mais de 10000 arquivos, já que cada módulo de nó traz suas próprias dependências, independentemente do mesmo dependência é usada por outro módulo. E isso é algo muito difícil de mudar para qualquer lugar, sem falar em um servidor da web.

Estou esquecendo de algo? Eu não acho que é possível que muitos elogios sejam dados ao ambiente do nó enquanto existe uma falha tão clara. Espero demais (afinal tentei usar muitas ferramentas de uma só vez), existe algo trivial conhecido pelos veteranos do Node para contornar isso?

Ou Yaniv
fonte
2
concordo totalmente, fiquei surpreso ao ver a árvore npm para alguns projetos de front-end. Eu acho que no mundo .net você tem a mesma coisa, mas todos eles são compilados para binários para que você não aviso
Ewan
2
Infelizmente, essa não é realmente uma pergunta específica e responsável, por isso provavelmente será fechada em breve. O que posso dizer é que 1) enquanto todas essas ferramentas adicionais são úteis para algo, pequenos projetos simplesmente não precisam da maioria deles 2) todas as outras estruturas de programação com funcionalidade semelhante virão com uma quantidade semelhante de coisas (basta olhar nos downloads JRE ou .NET), a única diferença é quanto do que você precisa faz parte da distribuição "padrão" e quanto você precisa encontrar em outros pacotes 3) 100 MB na sua máquina de desenvolvimento não é nada
Ixrec
11
@Ixrec, é claro, é responsável, você acabou de fazer (ou tentou) :). Mas então, eu poderia argumentar suas afirmações: 1) esse não precisa ser um projeto minúsculo - considere um projeto com várias visualizações com seus próprios arquivos js e folhas de estilo. isso é o suficiente para fazer você querer ter sass, cssnano e uglify. também o suficiente para fazer você querer expressar, jade e um pouco mais. 2) Eu tinha um projeto .net decente que não se tornou tão pesado (e não tem muitos arquivos). 3) talvez a máquina dev moderna leve isso com facilidade, mas isso também pesa no servidor, e isso é um pouco mais preocupante. Estou errado?
Ou Yaniv
2
@OrYaniv De fato, você está meio que provando meu argumento: esse é o tipo de questão que pode ser discutida , mas não respondida, porque é ampla demais e depende muito de exatamente quais projetos você está realizando e quais dependências parece ter. precisar. A propósito, as discussões terminam completamente no chat . Ou no Quora.
Ixrec 29/03/16
3
Bem-vindo ao mundo maravilhosamente inchado de "tudo ou nada" do node.js, que na verdade não é mais fácil e não é melhor do que o que você usou antes.
Traubenfuchs 29/03

Respostas:

3

O recente problema do teclado esquerdo é um excelente exemplo do problema com essa tendência no Node. Quando você depende de muitas coisas, todas elas são propensas a ir ao ka-pow, tornam seu projeto mais difícil de depurar e, para um iniciante, mais difícil de entender o funcionamento do idioma.

Agora, bons programadores do Node.js. sabem escrever aplicativos minimalistas, no que diz respeito às dependências. Quanto menos coisas você depender, melhor. Precisa colocar as cordas à esquerda? Codifique-o em um auxiliar, são 11 linhas de código com os espaços em branco. Precisa numerar suas linhas de string? Codifique, são menos de 100 linhas de código.

Mesmo para tarefas mais complicadas, como gerenciamento de projetos, eu sugeriria manter o Makefiles enquanto o seu projeto é bastante simples - o grunhido e o gole são realmente úteis para projetos gigantes que precisam de muito trabalho pesado. Mas para o seu blog no SPA? Escreva um Makefile, leva 5 minutos e você sabe como ele funciona.

A tentação de simplesmente navegar npm toda vez que você precisar escrever três linhas de código é grande, mas deve ser resistida sempre que for razoável. Não inclua jQuery se você tiver três manipulações DOM, não use angular para a página de promoção estática, não use express para um servidor simplista. Mas você está codificando um CMS? Você teria que ser louco para não usar pacotes como jQuery, sublinhado e o que não é. Trabalhando com 10 tipos de coleção, 3 dbs e consultando-os o tempo todo? Você seria louco para não usar sublinhado e alguns outros. Apenas pense 'economizo tempo suficiente instalando este pacote?' ou 'Não posso codificar isso por meia hora mais ou menos?'

BorisStoyanovv
fonte
11
Em outra nota, são necessárias 100 linhas de código Javascript para adicionar números de linha a uma string?
Robert Harvey
Hahahah, eu realmente não tinha pensado em uma implementação realista de numeração de linhas, porque ... eu realmente não vejo a necessidade de tal coisa existir, muito menos como um pacote.
BorisStoyanovv 30/03/19
Você provavelmente poderia cortar essa linha pela metade, deixando que ela fosse opinativa. É realmente um problema simples de resolver. (E é um um forro em uma linguagem como esquema, e provavelmente python agora que penso nisso)
Shayne