Angular - Conhecendo os arquivos de Configuração
Hoje temos uma contribuição de Cláudio Ralha que apresenta os arquivos de configuração de um projeto Angular.

Conhecendo os arquivos de configuração de um projeto Angular (Cláudio Ralha)

O Framework Angular, criado pelo Google em parceria com a Microsoft, vem conquistando a cada dia mais espaço no mercado brasileiro, pelo nível de organização, reaproveitamento de código e testabilidade que oferece. Voltado para desenvolvedores mais experientes, o Angular apresenta uma curva de aprendizado maior do que outras alternativas por envolver um grande número de conceitos e de locais específicos onde cada funcionalidade deve ser criada.

Isto pode soar tedioso e complexo em um primeiro momento, mas na prática as coisas são bem mais simples pois boa parte desta estrutura é gerada e mantida de forma automática por ferramentas gratuitas criada pelo time de desenvolvimento do Angular. Passado o susto inicial, o que percebemos é que o nível de padronização é muito alto e uma vez que estejamos familiarizamos com o framework e entendemos como as coisas estão organizadas, fica mais simples de ingressar em projetos em andamento.

 Este é, sem sombra de dúvidas, o cenário mais frequente que encontraremos no mercado de trabalho, consequentemente quem busca uma boa remuneração precisa estar apto a enfrentar a curva de aprendizado do Angular. A boa notícia é que a padronização e a automatização da geração de parte do código fonte irão aumentar a sua produtividade, algo que é almejado por todo bom desenvolvedor. 

Como a maioria dos projetos atuais são gerados usando a ferramenta de linha de comando Angular-CLI ou por uma IDE como o Visual Studio, você verá que o nome dos arquivos, a sua localização e o seu conteúdo serão iguais em todos os novos projetos que criar. Em geral, isto é válido também quando se busca projetos de template criados por terceiros desenvolvidos nos últimos 3 anos em Angular.  

Neste artigo, iremos detalhar a utilidade de cada um dos arquivos de configuração existentes em um projeto Angular partindo de um projeto de teste criado a partir do template Angular do Visual Studio 2019 e explicaremos as pequenas diferenças existentes neste tipo de projeto em relação a um projeto criado via prompt de comando usando a ferramenta Angular-CLI (que você também pode criar, se preferir, para fins de consulta). Deste modo, você poderá inspecionar cada arquivo do projeto durante a leitura do artigo e consultar as referências fornecidas para cada um deles.

Criando um projeto de teste para o Visual Studio

Para criar uma aplicação de teste em Angular no Visual Studio 2019, execute os seguintes passos:

       1. Inicie o Visual Studio 2019. Na janela Inicial, selecione Criar um Projeto.

       2. Na lista de templates, localize e selecione Aplicativo Web ASP.NET Core e a seguir clique no botão Próximo.

   

      3. No campo Nome do projeto, digite TesteAngularVS. Em seguida, clique no botão Criar para avançar.

   

        4. Na lista de opções mostrada à esquerda, selecione Angular. Clique em seguida novamente no botão Criar para confirmar a criação do projeto.

   

        5.  Aguarde enquanto o Visual Studio cria a estrutura de pastas e arquivos do projeto. Ao final, veremos no gerenciador de soluções uma estrutura semelhante à mostrada a seguir:

   
 

Tenha em mente que a estrutura de pastas de um projeto criado através do Visual Studio difere ligeiramente de um projeto gerado via ferramenta Angular CLI pois o projeto é preparado para rodar em uma única porta tanto a parte de front-end quanto de back-end a partir do comando Executar do Visual Studio.

Nos projetos criados a partir do template original do Visual Studio, toda a parte de front-end do projeto relacionada ao Angular está localizada a partir da pasta ClientApp existente na pasta raiz do projeto. O código da aplicação em si fica dentro da pasta ClientApp/src/app. Os nomes dos arquivos são os mesmos.

O template fornecido com o Visual Studio oferece um exemplo básico de roteamento e de consumo de uma Web API e está baseado no Angular 8 (previamente no Angular 6), conforme você poderá observar ao abrir o arquivo package.json. Veja:

   

Pastas Especiais

 Antes de passarmos a lista de arquivos de configuração do projeto, existem algumas pastas que tem funções especiais em uma aplicação Angular e que você precisa conhecer. São elas:

Arquivos de Configuração

Um projeto escrito em Angular contém vários arquivos de configuração que já são pré-configurados com opções padrões ao serem criados. Em alguns casos, essas configurações default atendem as necessidades dos sistemas em construção e não precisam ser alteradas. Em outros, teremos alterações frequentes à medida que o projeto for evoluindo.

As alterações serão feitas manualmente pelo desenvolvedor usando um editor como o Visual Studio ou Visual Studio Code ou de forma automática pelas ferramentas Angular CLI e NPM de forma transparente. Vale ressaltar que o fato do projeto ter sido criado inicialmente usando o Visual Studio não significa que não utilizaremos ao longo de sua evolução a ferramenta Angular-CLI. Ela foi projetada pelo time de desenvolvimento do Angular para ajudar a garantir a qualidade do código do projeto à medida em que criamos novos elementos e deve fazer parte do nosso dia a dia.

Os arquivos enumerados a seguir serão eventualmente editados para ajustar o comportamento das ferramentas de desenvolvimento em uso ou as configurações do próprio projeto:

Angular.json

Pasta: ClientApp

Arquivo de configuração de projeto contendo opções de gerenciamento de diferentes ambientes, testes, proxy, recursos de terceiros, ferramentas integradas e recursos para o desenvolvimento do aplicativo. Nas versões mais recentes do Angular, este arquivo pode ser manipulado diretamente pela ferramenta Angular CLI. Até o Angular 5, utilizávamos o arquivo de configuração angular-cli.json. A partir do Angular 6, este arquivo foi substituído pelo arquivo angular.json.

Referência:

https://angular.io/guide/workspace-config

Package.json

Pasta: ClientApp

Arquivo usado para informar as dependências do projeto, ou seja, os pacotes que devem estar presentes para que o projeto seja executado. Neste arquivo temos informações para usar o servidor que vai levantar nossa aplicação, as dependências do Angular e de outras bibliotecas, além das dependências para o ambiente de desenvolvimento.

Em scripts, temos os comandos que executaremos para compilar e inicializar nosso servidor local, e em dependencies e devDependencies temos informações das bibliotecas a serem incluídas e utilizadas no projeto. Os gerenciadores de pacote NPM e Yarn instalam os pacotes que estão listados neste arquivo.

Referência:

https://angular.io/guide/npm-packages

Package-lock.json

Pasta: ClientApp

Arquivo usado para controlar a versão de todos os módulos que são instalados na pasta node_modules. Este arquivo é manipulado diretamente pelo gerenciador de pacotes NPM.

Referência:

https://docs.npmjs.com/files/package-lock.json

Tsconfig.json

Pasta: ClientApp

Arquivo contendo as configurações selecionadas para o compilador de TypeScript. Define como o Typescript vai gerar Javascript a partir dos arquivos do nosso projeto em uma operação conhecida como transpilação.

Referência:

https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
https://angular.io/guide/typescript-configuration

Tslint.json

Pasta: ClientApp

Arquivo contendo as configurações de regras de execução do TypeScript lint.

Referência:

https://palantir.github.io/tslint/usage/configuration/

Karma.conf.ts

Pasta: ClientApp/src

Arquivo de configuração parcial do Karma test runner. O Angular CLI constrói a configuração completa de execução em memória baseada na estrutura especificada no arquivo angular.json em conjunto com o que está definido no arquivo karma.conf.js.

Referência:

https://angular.io/guide/testing

Main.ts

Pasta: ClientApp/src

Arquivo usado para inicializar a aplicação. Não se trata de um módulo e sim de um simples arquivo de script. O conteúdo deste arquivo irá variar, dependendo do tipo de aplicação que se está criando. O Angular pode ser usado para criar aplicações Web, Mobile (usando o framework Ionic) e Desktop (usando o framework Elektron).

Referência:

https://medium.com/@coderonfleek/understanding-the-angular-boot-process-9a338b06248c

Polyfills.ts

Pasta: ClientApp/src

Um pollyfill é um arquivo de script utilizado para fornecer a navegadores mais antigos funcionalidades que são requeridas pelos aplicativos Angular. O arquivo Polyfills.ts especifica os scripts que serão utilizados para os navegadores desatualizados.

Referência:

https://angular.io/guide/browser-support#enabling-polyfills

styles.css

Pasta: ClientApp/src

Arquivo de folha de estilos principal do projeto. Este arquivo pode ser substituído por outros criados por pré-processadores SASS, Less ou Stylus. É editado diretamente pelo desenvolvedor.

Referência:

http://sass-lang.com/
http://lesscss.org/
http://stylus-lang.com/

Test.ts

Pasta: ClientApp/src

Arquivo de teste do Angular usado pelo Karma Test Runner em conjunto como arquivo karma.conf.js quando utilizamos o comando ng test.

Referência:

https://angular.io/guide/testing

tsconfig.app.json

Pasta: ClientApp/src

Arquivo contendo configurações para o compilador de TypeScript. Este arquivo estende as configurações realizadas no arquivo tsconfig.json.

Referência:

https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
https://angular.io/guide/typescript-configuration

tsconfig.server.json

Pasta: ClientApp/src

Arquivo contendo configurações para o compilador de TypeScript. Este arquivo estende as configurações realizadas no arquivo tsconfig.app.json.

Referência:

https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
https://angular.io/guide/typescript-configuration

tsconfig.spec.json

Pasta: ClientApp/src

Arquivo contendo configurações para o compilador de TypeScript.

Referência:

https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
https://angular.io/guide/typescript-configuration

tslint.json

Pasta: ClientApp/src

Arquivo de configuração padrão para as regras de execução da ferramenta TypeScript Lint. Existe outro arquivo similar na pasta ClientApp.

Referência:

https://palantir.github.io/tslint/usage/configuration/

environment.ts

Pasta: ClientApp/src/environments

Arquivo de configuração usado para atribuir configurações específicas do ambiente default (ambiente de desenvolvimento). Usado para definir, por exemplo, a URL que será usada para carregar a aplicação em modo de desenvolvimento.

Referência:

https://angular.io/guide/build

environment.prod.ts

Pasta: ClientApp/src/environments

Arquivo de configuração usado para atribuir configurações específicas do ambiente de produção.

Referência:

https://angular.io/guide/build

App.module.ts

Pasta: ClientApp/src/app

Arquivo do módulo principal do projeto que agrupa os componentes, diretivas, pipes e serviços usados na aplicação. A ferramenta Angular-CLI manipula este arquivo de forma automática à medida que adicionamos novos elementos ao projeto. Em alguns cenários mais específicos, a edição é feita de forma manual pelo desenvolvedor.

Referência:

https://angular.io/guide/bootstrapping
https://angular.io/guide/architecture-modules

App.server.module.ts

Pasta: ClientApp/src/app

Arquivo de módulo de um projeto que utiliza Angular Universal, uma tecnologia que permite renderizar aplicações Angular diretamente no servidor.

Referência:

https://angular.io/guide/universal

Note que deixamos de fora desta lista, arquivos de configuração relacionados ao Docker e ao Git incluídos pelo Visual Studio, focando apenas no conjunto de arquivos relacionados ao Angular.

Conclusão

Este artigo é fruto das dificuldades enfrentadas pelo autor Cláudio Ralha em aprender o framework Angular. A motivação para escrevê-lo surgiu ao perceber que existe muita informação relevante disponível na Internet, mas pulverizada em um grande número de sites. A própria documentação oficial do Angular não é tão intuitiva como deveria e não parece voltada para iniciantes.

Para dar um pouco mais de emoção para o desafio de dominar o Angular, ainda temos que lidar com o fato de que se trata de um framework que está evoluindo muito rapidamente, com novas versões principais sendo lançadas a cada seis meses. Por mais que isso mantenha o interesse em alta da comunidade técnica, há mudanças que invalidam o que está descrito em artigos e livros mais antigos (especialmente aqueles dedicados ao AngularJS ou Angular 1 que na prática é outro framework), logo consultar conteúdo atualizado e fóruns como o StackOverflow é vital para aprender mais em menos tempo.

Tenha em mente que se fosse fácil não teria tanta graça e nem garantiria uma boa remuneração. Vale a pena investir o seu tempo nesse framework mantido por dois gigantes do mercado, com suporte à linguagem visual Material Design (procure por Angular Material) e que dispõe um grande número de bibliotecas para os mais diversos fins, algo vital para quem busca entregar projetos profissionais de alta complexidade em pouco tempo sem ter que ficar “reinventando a roda” e sem perder a sanidade.

Bom estudo e até breve!
Cláudio Ralha

Referências:


José Carlos Macoratti