Qual é o melhor método para agrupar o Angular (versão 2, 4, 6, ...) para produção em um servidor da web ao vivo.
Inclua a versão Angular nas respostas para que possamos acompanhar melhor quando ela for lançada posteriormente.
angular
webpack
systemjs
angular-cli
Pat M
fonte
fonte
Respostas:
2.x, 4.x, 5.x, 6.x, 7.x, 8.x, 9.x
(TypeScript) com CLI angularConfiguração do OneTime
npm install -g @angular/cli
ng new projectFolder
cria um novo aplicativoEtapa de agrupamento
ng build --prod
(executado na linha de comandos quando o diretório estiverprojectFolder
)prod
Pacote de sinalizadores para produção (consulte a documentação Angular para obter a lista de opções incluídas no sinalizador de produção).Compactar usando Brotli compacta os recursos usando o seguinte comando
for i in dist/*; do brotli $i; done
os pacotes configuráveis são gerados por padrão para projectFolder / dist (/ $ projectFolder for 6)
Resultado
Tamanhos com Angular
9.0.0
com CLI9.0.1
e opção CSS sem roteamento Angulardist/main-[es-version].[hash].js
Seu aplicativo empacotou [tamanho do ES5: 158 KB para o novo aplicativo CLI Angular vazio, 40 KB compactado].dist/polyfill-[es-version].[hash].bundle.js
as dependências do polyfill (@angular, RxJS ...) empacotadas [tamanho ES5: 127 KB para o novo aplicativo CLI Angular vazio, 37 KB compactado].dist/index.html
ponto de entrada da sua aplicação.dist/runtime-[es-version].[hash].bundle.js
carregador webpackdist/style.[hash].bundle.css
as definições de estilodist/assets
recursos copiados da configuração de ativos da CLI AngularDesdobramento, desenvolvimento
Você pode obter uma visualização do seu aplicativo usando o
ng serve --prod
comando que inicia um servidor HTTP local, para que o aplicativo com arquivos de produção seja acessível usando http: // localhost: 4200 .Para um uso de produção, você deve implantar todos os arquivos da
dist
pasta no servidor HTTP de sua escolha.fonte
2.0.1 Final
usando Gulp (TypeScript - Destino: ES5)Configuração do OneTime
npm install
(executado no cmd quando direcory é projectFolder)Etapas de agrupamento
npm run bundle
(executado no cmd quando direcory é projectFolder)pacotes são gerados para projectFolder / bundles /
Resultado
bundles/dependencies.bundle.js
[ tamanho: ~ 1 MB (o menor possível)]bundles/app.bundle.js
[ tamanho: depende do seu projeto , o meu é ~ 0,5 MB ]Estrutura do arquivo
dist-systemjs.config.js
tag após as tags do pacote configurável ainda permitiria a execução do programa, mas o pacote configurável de dependência seria ignorado e as dependências seriam carregadas danode_modules
pasta.O melhor que pude fazer ainda :)
fonte
inline-templates
é executado, ele inline os modelos e cria uma cópia de todas as pastas e arquivos do aplicativo emdist/app
. Em seguida,dist-systemjs.config.js
você mapeiaapp
para adist/app
qual existe uma pasta que não existirá se você a usardist
como raiz. Você não gostaria de executar seu aplicativo a partir dadist
pasta? E se for esse o caso, você não teria umadist
pasta aninhada nadist
pasta raiz . Eu devo estar perdendo algo mais aqui. Você não precisa dizer ao systemjs para usar seus arquivos agrupados e não os arquivos habituais encontrados nadist/app
pasta?Angular 2 com Webpack (sem configuração da CLI)
1- O tutorial da equipe Angular2
A equipe do Angular2 publicou um tutorial para usar o Webpack
Criei e coloquei os arquivos do tutorial em um pequeno projeto de semente do GitHub . Para que você possa experimentar rapidamente o fluxo de trabalho.
Instruções :
instalação npm
npm start . Para desenvolvimento. Isso criará uma pasta virtual "dist" que será carregada no seu endereço do host local.
npm executar compilação . Para produção. "Isso criará uma versão física da pasta" dist "que pode ser enviada para um servidor da Web. A pasta dist é de 7,8 MB, mas apenas 234 KB são realmente necessários para carregar a página em um navegador da Web.
2 - Um kit inicial do Webkit
Este Webpack Starter Kit oferece mais recursos de teste que o tutorial acima e parece bastante popular.
fonte
Fluxo de trabalho de produção angular 2 com o construtor SystemJs e gulp
Angular.io tem tutorial de início rápido. Copiei este tutorial e estendi algumas tarefas simples para agrupar tudo na pasta dist, que pode ser copiada para o servidor e funcionar assim. Tentei otimizar tudo para funcionar bem no Jenkis CI, para que o node_modules possa ser armazenado em cache e não precise ser copiado.
Código-fonte com aplicativo de exemplo no Github: https://github.com/Anjmao/angular2-production-workflow
Etapas para a produçãoNó : Embora você sempre possa criar seu próprio processo de criação, mas eu recomendo usar o angular-cli, porque ele possui todos os fluxos de trabalho necessários e funciona perfeitamente agora. Já o estamos usando na produção e não temos nenhum problema com o angular-cli.
fonte
CLI angular 1.xx (funciona com Angular 4.xx, 5.xx)
Isso suporta:
Configuração inicial
Você pode adicionar
--style=scss
ao suporte ao SASS .scss.Você pode adicionar o
--ng4
Angular 4 em vez do Angular 2.Após criar o projeto, a CLI será executada automaticamente
npm install
para você. Se você deseja usar o Yarn, ou apenas deseja ver o esqueleto do projeto sem instalar, verifique como fazê-lo aqui .Etapas do pacote
Dentro da pasta do projeto:
Na versão atual, você precisa especificar--aot
manualmente, porque pode ser usado no modo de desenvolvimento (embora isso não seja prático devido à lentidão).Isso também executa a compilação AoT para pacotes ainda menores (nenhum compilador Angular, em vez disso, gerou saída do compilador). Os pacotes configuráveis são muito menores com o AoT se você usar o Angular 4, pois o código gerado é menor.
Você pode testar seu aplicativo com o AoT no modo de desenvolvimento (mapas de origem, sem minificação) e o AoT executando
ng build --aot
.Resultado
O diretório de saída padrão é
./dist
, embora possa ser alterado./angular-cli.json
.Arquivos implantáveis
O resultado da etapa de construção é o seguinte:
(Nota:
<content-hash>
refere-se ao hash / impressão digital do conteúdo do arquivo que deve ser uma maneira de impedir o cache, isso é possível, pois o Webpack grava asscript
tags sozinho)./dist/assets
Arquivos copiados como estão de
./src/assets/**
./dist/index.html
A partir
./src/index.html
, depois de adicionar scripts de Webpack a elearquivo de modelo Fonte está em configurável
./angular-cli.json
./dist/inline.js
Carregador webpack pequeno / de polifill
./dist/main.<content-hash>.bundle.js
O arquivo .js principal que contém todos os scripts .js gerados / importados
./dist/styles.<content-hash>.bundle.js
Quando você usa carregadores Webpack para CSS, que é o caminho da CLI, eles são carregados via JS aqui
Nas versões mais antigas, também criava versões compactadas com gzip para verificar o tamanho e os
.map
arquivos dos mapas de origem, mas isso não acontece mais porque as pessoas pediam para removê-los.Outros arquivos
Em outras ocasiões, você pode encontrar outros arquivos / pastas indesejados:
./out-tsc/
De
./src/tsconfig.json
'soutDir
./out-tsc-e2e/
De
./e2e/tsconfig.json
'soutDir
./dist/ngfactory/
Do compilador AoT (não configurável sem bifurcar a CLI a partir da versão 16)
fonte
<content-hash>
os pacotes no prod. pode causar problemas na obtenção do pacote mais recente?Até hoje, ainda encontro o livro de receitas de Compilação antecipada como a melhor receita para agrupar a produção. Você pode encontrá-lo aqui: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html
Minha experiência com o Angular 2 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 2 em compilação dev vs AoT - que você pode ver aqui:
https://youtu.be/ZoZDCgQwnmQ
Você encontrará o código-fonte usado no vídeo aqui:
https://github.com/fintechneo/angular2-templates
fonte
fonte
Você pode implantar seu aplicativo angular
github
usando angular angular-cli-ghpagesconfira o link para descobrir como implantar usando este CLI.
o site implantado será armazenado em alguma filial da
github
normalmentepáginas gh
O uso pode clonar o ramo git e usá-lo como um site estático no seu servidor
fonte
"Melhor" depende do cenário. Há momentos em que você se preocupa apenas com o menor pacote único possível, mas em aplicativos grandes, pode ser necessário considerar um carregamento lento. Em algum momento, torna-se impraticável veicular o aplicativo inteiro como um único pacote.
Neste último caso, o Webpack é geralmente a melhor maneira, pois suporta a divisão de código.
Para um único pacote, consideraria o Rollup ou o compilador Closure se você estiver se sentindo corajoso :-)
Criei amostras de todos os empacotadores angulares que já usei aqui: http://www.syntaxsuccess.com/viewarticle/angular-production-builds
O código pode ser encontrado aqui: https://github.com/thelgevold/angular-2-samples
Versão angular: 4.1.x
fonte
Basta configurar o angular 4 com o webpack 3 em um minuto, seu pacote ENV de desenvolvimento e produção ficará pronto sem nenhum problema, basta seguir o documento abaixo do github
https://github.com/roshan3133/angular2-webpack-starter
fonte
Por favor, tente abaixo do comando da CLI no diretório do projeto atual. Isso criará um pacote de pastas dist. para que você possa carregar todos os arquivos na pasta dist para implantações.
ng build --prod --aot --base-href.
fonte
ng serve obras para atender nosso aplicativo para fins de desenvolvimento. E quanto à produção? Se olharmos para o nosso arquivo package.json, podemos ver que existem scripts que podemos usar:
O script de construção usa a construção ng da CLI Angular com o sinalizador --prod. Vamos tentar isso agora. Podemos fazer isso de duas maneiras:
# usando os scripts npm
# usando o cli diretamente
Desta vez, recebemos quatro arquivos em vez dos cinco. O sinalizador --prod informa ao Angular para tornar nosso aplicativo muito menor em tamanho.
fonte