Eu queria iniciar um aplicativo simples olá mundo para Angular.
Quando segui as instruções no início rápido oficial, a instalação criou 32.000 arquivos no meu projeto.
Achei que fosse algum erro ou perdi alguma coisa, então decidi usar o angular-cli , mas depois de configurar o projeto, contei 41.000 arquivos.
Onde foi que eu errei? Estou sentindo falta de algo realmente muito óbvio?
javascript
angular
Moshe Shaham
fonte
fonte
Respostas:
Não há nada de errado com sua configuração.
Angular (desde a versão 2.0) usa módulos npm e dependências para desenvolvimento. Essa é a única razão pela qual você está vendo um número tão grande de arquivos.
Uma configuração básica do Angular contém transpiler, dependências de digitação que são essenciais apenas para fins de desenvolvimento.
Depois de concluir o desenvolvimento, tudo o que você precisará fazer é agrupar esse aplicativo.
Depois de agrupar seu aplicativo, haverá apenas um
bundle.js
arquivo que você poderá implantar no servidor.'transpiler' é apenas um compilador, obrigado @omninonsense por adicionar isso.
fonte
Arquivos de pacote NPM (desenvolvimento) Arquivos do mundo real (implantação)
*
:bundled with @angular
[ veja isso para processo de empacotamento ⇗ ]
fonte
-3
foram dadas para não fazer a soma, mas agora eu tenho :)Não há nada de errado com sua configuração de desenvolvimento .
Algo errado com sua configuração de produção .
Ao desenvolver um "Projeto Angular 2" ou "Qualquer projeto baseado em JS", você pode usar todos os arquivos, experimentar todos os arquivos, importar todos os arquivos. Mas se você deseja servir esse projeto, precisa COMBINAR todos os arquivos estruturados e se livrar de arquivos inúteis.
Existem muitas opções para combinar esses arquivos:
fonte
Como várias pessoas já mencionaram: Todos os arquivos no diretório node_modules (local do NPM para pacotes) fazem parte das dependências do seu projeto (chamadas dependências diretas). Além disso, suas dependências também podem ter suas próprias dependências, etc. (chamadas dependências transitivas). Vários dez mil arquivos não são nada de especiais.
Como você só pode carregar 10.000 arquivos (ver comentários), eu usaria um mecanismo de empacotador. Esse mecanismo agrupará todo o seu JavaScript, CSS, HTML etc. e criará um único bundle (ou mais, se você os especificar). Seu index.html carregará esse pacote e é isso.
Como sou fã do webpack, minha solução criará um pacote de aplicativos e um pacote de fornecedores (para o aplicativo de trabalho completo, veja aqui https://github.com/swaechter/project-collection/tree/master/web-angular2- exemplo ):
index.html
webpack.config.js
Vantagens:
Desvantagens:
Aviso Legal: Esta é uma boa solução para o Http 1. *, porque minimiza a sobrecarga de cada solicitação de Http. Você só tem uma solicitação para o seu index.html e cada pacote configurável - mas não para 100 - 200 arquivos. No momento, este é o caminho a percorrer.
O HTTP 2, por outro lado, tenta minimizar a sobrecarga do HTTP, por isso é baseado em um protocolo de fluxo. Esse fluxo é capaz de se comunicar nas duas direções (Cliente <--> Servidor) e, por isso, é possível um carregamento de recursos mais inteligente (você carrega apenas os arquivos necessários). O fluxo elimina grande parte da sobrecarga Http (menos viagens de ida e volta Http).
Mas é o mesmo que com o IPv6: levará alguns anos até que as pessoas realmente usem o Http 2
fonte
angular-cli
que já vem com um empacotador (o mesmo webpack sugerido).Você precisa garantir que está apenas implantando a pasta dist (abreviação de distribuível) do seu projeto gerado pela CLI Angular . Isso permite que a ferramenta pegue seu código-fonte e suas dependências e só lhe dê o que você precisa para executar seu aplicativo.
Dito isto, há / houve um problema com a CLI Angular em relação às compilações de produção via `ng build --prod
Ontem (2 de agosto de 2016), foi realizada uma liberação que mudou o mecanismo de compilação de broccoli + systemjs para webpack, que gerencia com êxito as compilações de produção.
Com base nestas etapas:
Estou vendo um
dist
tamanho de pasta de 1,1 MB nos 14 arquivos listados aqui:Nota Atualmente, para instalar a versão webpack do angular cli, você deve executar ...
npm install angular-cli@webpack -g
fonte
O próprio Angular possui muitas dependências e a versão beta do CLI baixa quatro vezes mais arquivos.
É assim que criar um projeto simples com menos arquivos ("apenas" arquivos de 10K) https://yakovfain.com/2016/05/06/starting-an-angular-2-rc-1-project/
fonte
Parece que ninguém mencionou a Compilação antecipada, como descrito aqui: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html
Minha experiência com o Angular até agora é que o AoT cria as versões menores, quase sem tempo de carregamento. E o mais importante, como é a pergunta aqui - você só precisa enviar alguns arquivos para produção.
Isso ocorre porque o compilador Angular não será enviado com as compilações de produção, pois os modelos são compilados "Antecipadamente". Também é muito bacana ver sua marcação de modelo HTML transformada em instruções javascript que seriam muito difíceis de fazer a engenharia reversa no HTML original.
Fiz um vídeo simples em que demonstro o tamanho do download, o número de arquivos, etc., para um aplicativo Angular na compilação dev vs AoT - que você pode ver aqui:
https://youtu.be/ZoZDCgQwnmQ
Você encontrará o código fonte da demonstração aqui:
https://github.com/fintechneo/angular2-templates
E - como todos os outros disseram aqui - não há nada errado quando há muitos arquivos em seu ambiente de desenvolvimento. É assim que acontece com todas as dependências que acompanham o Angular e com muitas outras estruturas modernas. Mas a diferença aqui é que, ao enviar para produção, você poderá compactá-lo em alguns arquivos. Além disso, você não deseja todos esses arquivos de dependência no seu repositório git.
fonte
Na verdade, isso não é específico da Angular, acontece com quase todos os projetos que usam o ecossistema NodeJs / npm para suas ferramentas.
Esses projetos estão dentro das pastas node_modules e são as dependências transititve que suas dependências diretas precisam executar.
No nó, os módulos do ecossistema são geralmente pequenos, o que significa que, em vez de desenvolvermos as coisas, tendemos a importar a maior parte do que precisamos sob a forma de um módulo. Isso pode incluir coisas pequenas, como a famosa função do teclado esquerdo, por que escrevê-la, se não como um exercício?
Portanto, ter muitos arquivos é realmente uma coisa boa, significa que tudo é muito modular e os autores de módulos frequentemente reutilizam outros módulos. Essa facilidade de modularidade é provavelmente uma das principais razões pelas quais o ecossistema de nós cresceu tão rápido.
Em princípio, isso não deve causar nenhum problema, mas parece que você se depara com um limite de contagem de arquivos do Google App Engine. Nesse caso, sugiro não fazer upload de node_modules para o App Engine.
em vez disso, crie o aplicativo localmente e faça o upload para o Google App Engine apenas os arquivos incluídos, mas não para a compilação no próprio App Engine.
fonte
Se você estiver usando a versão mais recente do angular cli, use
ng build --prod
Isso criará dist pasta com menos arquivos e a velocidade do projeto aumentará.
Também para testes em locais com melhor desempenho do CLI angular, você pode usar
ng serve --prod
fonte
se você usa a CLI angular, sempre pode usar a sinalização --minimal ao criar um projeto
Acabei de executá-lo com o sinalizador e ele cria 24 600 arquivos e
ng build --prod
produz uma pasta dist de 212 KBEntão, se você não precisa de fontes de água em seu projeto ou apenas deseja testar rapidamente algo, acho útil
fonte
Criar um novo projeto com o angular cli recentemente e a pasta node_modules tinha 270 mb, então sim, isso é normal, mas tenho certeza que a maioria dos novos desenvolvedores do mundo angular questiona isso e é válida. Para um novo projeto simples, faria sentido reduzir as dependências talvez um pouco;) Não saber do que todos os pacotes dependem pode ser um pouco irritante, especialmente para os novos desenvolvedores que tentam cli pela primeira vez. Acrescente o fato de que os tutoriais mais básicos não discutem as configurações de implantação para obter apenas os arquivos exportados. Não acredito que mesmo o tutorial oferecido no site oficial angular fale sobre como implantar o projeto simples.
fonte
Aqui está uma comparação do que ocupa mais espaço em projetos angulares.
fonte
Se o seu sistema de arquivos suportar links simbólicos, você poderá pelo menos relegar todos esses arquivos para uma pasta oculta - para que uma ferramenta inteligente como essa
tree
não os exiba por padrão.O uso de uma pasta oculta para isso também pode incentivar o entendimento de que esses são arquivos intermediários relacionados à construção que não precisam ser salvos no controle de revisão - ou usados diretamente em sua implantação.
fonte
Não há nada errado. Essas são todas as dependências do nó que você mencionou no package.json.
Apenas tenha cuidado se você tiver baixado parte do projeto git hub, ele pode ter muitas outras dependências que não são realmente necessárias para o aplicativo angular 2 first hello world :)
fonte