Há um tutorial de início rápido em angular.io que usa o texto digitado e o systemjs. Agora que tenho aquele miniapp em execução, como faria para criar algo implantável? Não consegui encontrar nenhuma informação sobre isso.
Preciso de alguma ferramenta extra, alguma configuração adicional em System.config?
(Eu sei que poderia usar o webpack e criar um único bundle.js, mas gostaria de usar o systemjs como é usado no tutorial)
Alguém poderia compartilhar seu processo de construção com esta configuração (Angular 2, TypeScript, systemjs)
typescript
angular
systemjs
Brian G. Bell
fonte
fonte
Respostas:
O principal a ser entendido neste nível é que, usando a configuração a seguir, você não pode concatear arquivos JS compilados diretamente.
Na configuração do compilador TypeScript:
No HTML
Na verdade, esses arquivos JS conterão módulos anônimos. Um módulo anônimo é um arquivo JS que usa,
System.register
mas sem o nome do módulo como primeiro parâmetro. Isso é o que o compilador de texto digitado gera por padrão quando systemjs é configurado como gerenciador de módulo.Portanto, para ter todos os seus módulos em um único arquivo JS, você precisa aproveitar a
outFile
propriedade dentro da configuração do compilador TypeScript.Você pode usar o seguinte gole interno para fazer isso:
Isso pode ser combinado com algum outro processamento:
app.js
arquivovendor.js
arquivo para bibliotecas de terceirosboot.js
arquivo para importar o módulo que inicializa o aplicativo. Este arquivo deve ser incluído no final da página (quando toda a página estiver carregada).index.html
para levar em consideração esses dois arquivosAs seguintes dependências são usadas nas tarefas gulp:
A seguir está um exemplo para que possa ser adaptado.
Criar
app.min.js
arquivoCriar
vendors.min.js
arquivoCriar
boot.min.js
arquivoO
config.prod.js
simplesmente contém o seguinte:Atualize o
index.html
arquivoO se
index.html
parece com o seguinte:Observe que
System.import('boot');
deve ser feito no final do corpo para aguardar que todos os componentes do seu aplicativo sejam registrados noapp.min.js
arquivo.Não descrevo aqui a maneira de lidar com a minimização de CSS e HTML.
fonte
Você pode usar o comando de construção angular2-cli
https://github.com/angular/angular-cli/wiki/build#bundling
Atualizar
Esta resposta foi enviada quando angular2 estava em rc4
Eu tentei novamente no angular-cli beta21 e angular2 ^ 2.1.0 e está funcionando como esperado
Esta resposta requer a inicialização do aplicativo com angular-cli que você pode usar
Ou em um existente
Atualização 06/08/2018
Para angular 6, a sintaxe é diferente.
Verifique a documentação
fonte
Você pode construir um projeto Angular 2 (2.0.0-rc.1) em Typescript usando SystemJS com Gulp e SystemJS-Builder .
Abaixo está uma versão simplificada de como construir, agrupar e minimizar o Tour of Heroes executando 2.0.0-rc.1 ( fonte completa , exemplo ao vivo ).
gulpfile.js
system.config.js
fonte
gulp <taskname>
onde "taskname" é o nome da tarefa que chama o construtor SystemJS, no meu exemplo acimabundle:app
. Nessa tarefa Gulp, você pode usar o módulo npm 'systemjs-builder' para especificar a configuração do sistema e o arquivo de saída.Aqui está meu boilerplate MEA2N para Angular 2: https://github.com/simonxca/mean2-boilerplate
É um clichê simples que usa
tsc
para colocar as coisas juntas. (Na verdade, usa grunt-ts , que em seu núcleo é apenas otsc
comando.) Não é necessário Wekpack etc.Quer você use ou não o grunhido, a ideia é:
ts/
(exemplopublic/ts/
:)tsc
para espelhar a estrutura de diretório de suats/
pasta em umajs/
pasta e apenas fazer referência aos arquivos dajs/
pasta em seuindex.html
.Para fazer o grunt-ts funcionar (deve haver um comando equivalente para plain tsc, Gulp, etc.), você tem uma propriedade em seu
tsconfig.json
chamado"outDir": "../js"
e a referencia em seugruntfile.js
com:Em seguida
grunt ts
, execute o , o que levará seu aplicativopublic/ts/
e o espelhará parapublic/js/
.Lá. Super fácil de entender. Não é a melhor abordagem, mas é uma boa para começar.
fonte
A maneira mais fácil que encontrei de agrupar angular rc1 para systemJs é usar
gulp
esystemjs-builder
:Conforme apontado nos comentários, systemJs atualmente tem problemas ao agrupar componentes usando
moduleId: module.id
https://github.com/angular/angular/issues/6131
A recomendação atual (angular 2 rc1) parece ser usar caminhos explícitos, ou seja
moduleId: '/app/path/'
fonte
@Component
decorador.bundle.js
tenta resolver caminhos como absolutos, embora sejam relativos, causando erros 404 (consulte stackoverflow.com/questions/37497635/… ). Como você lidou com isso?moduleId
para o caminho relativo?moduleId: module.id
em@Component
templateUrl
e anula o propósito de termoduleId
em primeiro lugar. Estou tentando usar caminhos relativos conforme recomendado ( angular.io/docs/ts/latest/cookbook/… )moduleId: '/app/components/home/'
Usei expressjs no back-end para servir ao meu projeto ng2. Você pode conferir na minha página do github: https://github.com/echonax/ng2-beta-and-test-framework
fonte
No site Angular.io, na seção Avançado / Implantação, é recomendado que a maneira mais simples de implantar seja 'copiar o ambiente de desenvolvimento para o servidor'.
vá até a seção em: Implementação mais simples possível. Os arquivos finais do projeto são mostrados dentro da seção de código. Observe que ele já configura o código para carregar arquivos de pacote npm da web (em vez da pasta npm_modules local).
certifique-se de que está sendo executado em seu computador local (npm start). Em seguida, na pasta do projeto, copie tudo na subpasta '/ src' para o bucket S3 que você configurou. Você pode usar arrastar e soltar para copiar, durante esse processo, você tem a opção de selecionar a configuração de permissão para os arquivos, certifique-se de torná-los 'legíveis' para 'todos'.
na guia 'Propriedades' do depósito, procure o painel 'Hospedagem de site estático', marque a opção 'Usar este depósito para hospedar o site' e especifique 'index.html' para o documento de índice e o documento de erro.
clique no site estático Endpoint, seu projeto estará em execução!
fonte