Experts in Angular

Domine as Configurações de Projetos AngularConfiguração do Workspace em Projetos Angular
Configuração do Workspace em Projetos Angular

Configuração do Workspace em Projetos Angular

Desvendando o Coração da Configuração do Angular: O Caminho para a Maestria no angular.json

No reino do Angular, o arquivo angular.json reina supremo, um pergaminho enigmático que guarda os segredos da configuração do seu reino de código. Dominar este pergaminho é essencial para qualquer aspirante a mestre Angular, pois ele molda o destino dos seus projetos, desde a fundação até a construção de imponentes catedrais de código.

Neste guia, desvendaremos os mistérios do angular.json, revelando os segredos por trás de sua estrutura, as opções de configuração que moldam o Angular CLI e os projetos que ele comanda, a arte da configuração de esquemas e builders, e como manipular configurações complexas com a maestria de um alquimista. Ao final desta jornada, você terá o conhecimento necessário para dominar o angular.json e moldar o seu reino Angular de acordo com sua visão.

Anatomia do Pergaminho
Anatomia do Pergaminho

Anatomia do Pergaminho: Estrutura Geral do angular.json

No topo do pergaminho angular.json, encontramos propriedades que ditam o destino de todo o reino de código, e uma seção especial, chamada projects, que abriga os segredos individuais de cada projeto. As opções de configuração definidas no nível do reino podem ser sobrepostas pelas opções definidas para cada projeto, e o poder final reside nas suas mãos, pois você pode usar a linha de comando para moldar o destino final do seu reino.

As seguintes propriedades, no topo do pergaminho, definem o destino do reino como um todo:

Propriedades Detalhes
version A versão do arquivo de configuração.
newProjectRoot Caminho onde novos projetos são criados através de ferramentas como ng generate application ou ng generate library. O caminho pode ser absoluto ou relativo ao diretório do workspace. Padrão: projects
cli Um conjunto de opções que personalizam o Angular CLI, o mago que invoca seus projetos à existência. Através do CLI, você controla os feitiços de construção, teste e execução, moldando o ciclo de vida dos seus projetos.
schematics Esquemas que guiam o feitiço ng generate, personalizando seus encantamentos para moldar seus projetos de acordo com seus desejos. Os esquemas definem a estrutura e o conteúdo dos novos projetos, permitindo que você invoque componentes, serviços, módulos e outras criaturas do Angular com um único comando.
projects Contém uma subseção para cada aplicação ou biblioteca no workspace, com opções de configuração específicas do projeto.

A aplicação inicial que você cria com ng new app-name é listada em “projects”:

Quando você cria um projeto de biblioteca com ng generate library, o projeto da biblioteca também é adicionado à seção projects.

A Forja do Mago: Opções de Configuração do Angular CLI

No coração do angular.json, a seção cli abriga as opções que personalizam o Angular CLI, o mago que invoca seus projetos à existência. Nesta forja, você controla os feitiços de construção, teste e execução, moldando o ciclo de vida dos seus projetos.

Você pode substituir os padrões do Angular CLI definidos no nível do workspace através de padrões definidos no nível do projeto. Também é possível substituir os padrões definidos no nível do projeto usando a linha de comando.

As seguintes propriedades, no nível superior do arquivo, configuram o workspace:

PropriedadeDetalhesTipo de ValorValor Padrão
analyticsCompartilha dados de uso anônimos com a Equipe Angular, ajudando-os a aprimorar o CLI. Um valor booleano indica se os dados devem ser compartilhados, enquanto uma string UUID compartilha dados usando um identificador pseudônimo.booleanstring
cacheControla o cache persistente em disco usado pelos Builders do Angular CLI, acelerando builds subsequentes.Cache options{}
schematicCollectionsLista as coleções de esquemas que podem ser usadas no feitiço ng generate, expandindo o seu arsenal de encantamentos para criar projetos, componentes, serviços e outras criaturas do Angular.string[]["@schematics/angular"]
packageManagerDefine o gerenciador de pacotes preferido para usar no seu reino, como npm, yarn ou pnpm. O Angular CLI usará este gerenciador para invocar feitiços como install, update e uninstall, gerenciando as dependências dos seus projetos.stringnpm
warningsControla os avisos específicos do Angular CLI que são exibidos no console, permitindo que você ajuste a quantidade de informações que o mago compartilha com você durante a execução dos feitiços.Warnings options{}

Aprofundando na Forja: Opções de Cache e Avisos do Angular CLI

Na forja do mago Angular CLI, as opções de cache e avisos oferecem controle refinado sobre o comportamento do CLI, permitindo que você otimize o desempenho e a experiência de desenvolvimento.

Propriedades de Cache

PropriedadeDescriçãoTipo de ValorValor Padrão
enabledHabilita ou desabilita o cache em disco para builds, acelerando builds subsequentes ao reutilizar resultados de builds anteriores.booleantrue
environmentConfigura em qual ambiente o cache em disco é habilitado: ci (apenas em ambientes de integração contínua), local (apenas fora de ambientes de CI) ou all (em todos os ambientes).stringlocal
pathDefine o diretório onde os resultados do cache são armazenados.string.angular/cache

Detalhamento das Propriedades de Cache
Opções de Avisos
PropriedadeDescriçãoTipo de ValorValor Padrão
versionMismatchExibe um aviso quando a versão global do Angular CLI é mais recente do que a versão local, alertando você sobre possíveis atualizações e novos recursos disponíveis.booleantrue

Esta propriedade controla se um aviso deve ser exibido quando a versão global do Angular CLI é mais recente que a versão instalada localmente no projeto. Manter a versão local atualizada é importante para garantir compatibilidade e acesso aos recursos mais recentes.

Moldando os Projetos: Opções de Configuração Individual

No angular.json, cada projeto, seja ele uma aplicação ou biblioteca, possui seu próprio conjunto de segredos que moldam seu destino. Na seção projects['project-name'], as seguintes propriedades ditam o caminho de cada criatura do Angular:

PropriedadeDescriçãoTipo de ValorValor Padrão
rootO diretório raiz onde os arquivos do projeto residem, relativo à raiz do reino. Para o projeto inicial, criado com ng new, este valor é vazio, pois ele reside no topo da hierarquia. Para outros projetos, este valor é geralmente projects/project-name.stringnone (obrigatório)
projectTypeDefine o tipo de projeto: application (uma aplicação que pode ser executada de forma independente em um navegador) ou library (uma coleção de módulos, componentes e serviços que podem ser reutilizados em outras aplicações).stringapplication
sourceRootO diretório raiz onde os arquivos fonte do projeto residem, como componentes, módulos e serviços. Por padrão, este valor é src, mas pode ser personalizado para se adequar à estrutura do seu projeto.stringsrc
prefixUm prefixo que o Angular adiciona aos seletores ao gerar novos componentes, diretivas e pipes com o feitiço ng generate. Personalize este prefixo para identificar a origem de cada criatura do Angular no seu reino.stringapp
schematicsEsquemas que guiam o feitiço ng generate para este projeto específico, permitindo que você personalize a criação de novas criaturas do Angular. Você pode definir esquemas para componentes, serviços, módulos e outras entidades, ajustando suas opções de configuração para se adequarem ao seu estilo de desenvolvimento.object{}
architectConfigurações padrão para os builders do Architect, os feiticeiros que constroem, testam e servem seus projetos. Através do Architect, você controla o ciclo de vida dos seus projetos, definindo as tarefas que serão executadas e as opções de configuração para cada uma delas.objectobject

A Arte da Criação: Esquemas no angular.json

No coração do angular.json, os esquemas (schematics) são como pergaminhos mágicos que guiam a criação e modificação de projetos Angular. Eles definem as instruções para adicionar novos arquivos, modificar os existentes e moldar a estrutura do seu reino de código.

Cada esquema possui um nome no formato <schematic-package>:<schematic-name>. Os esquemas padrão do Angular CLI, como @schematics/angular:component (para gerar um componente) e @schematics/angular:module (para gerar um módulo), estão disponíveis no pacote @schematics/angular.

Personalizando Esquemas

Você pode personalizar os esquemas no angular.json para ajustar o comportamento dos comandos ng generate. Por exemplo, para desativar a criação de componentes standalone por padrão, adicione a seguinte configuração no seu angular.json:

{
  "projects": {
    "my-app": {
      "schematics": {
        "@schematics/angular:component": {
          "standalone": false
        }
      }
    }
  }
}

Os campos dados no esquema do schematic correspondem aos valores permitidos dos argumentos da linha de comando e padrões para as opções dos subcomandos do Angular CLI.
Você pode atualizar o arquivo de esquema do workspace para definir um padrão diferente para uma opção de subcomando.

Configurando Schematics

Você pode configurar os schematics no arquivo angular.json para personalizar como os comandos de geração de código funcionam. Isso permite que você defina padrões específicos que se aplicam sempre que você usa um comando ng generate.

Exemplo de Configuração de Schematics

Suponha que você queira configurar o schematic para componentes para que eles usem a extensão scss para arquivos de estilo em vez de css. Você também quer que os componentes gerados sejam colocados em uma pasta específica.

{
  "projects": {
    "my-app": {
      "schematics": {
        "@schematics/angular:component": {
          "style": "scss",
          "path": "src/app/components"
        }
      }
    }
  }
}

Neste exemplo, sempre que você gerar um novo componente usando ng generate component, ele usará scss para os arquivos de estilo e será colocado na pasta src/app/components.

Outros Exemplos de Configuração

Configuração de Diretivas

Para configurar diretivas para usar um prefixo específico e um caminho padrão:

{
  "projects": {
    "my-app": {
      "schematics": {
        "@schematics/angular:directive": {
          "prefix": "myPrefix",
          "path": "src/app/directives"
        }
      }
    }
  }
}

Configuração de Serviços

Para configurar serviços para serem gerados em uma pasta específica e com a opção de ser um singleton:

{
  "projects": {
    "my-app": {
      "schematics": {
        "@schematics/angular:service": {
          "path": "src/app/services",
          "flat": true
        }
      }
    }
  }
}

Explorando as Possibilidades

Os esquemas oferecem um vasto leque de possibilidades para personalizar o seu fluxo de trabalho. Você pode definir opções padrão para nomes de arquivos, estilos, templates e outras configurações, moldando a criação de novas entidades no seu reino Angular.

A Oficina do Arquiteto: Configurando Builders no Angular CLI

No coração do angular.json, o Architect é o mestre construtor que comanda a execução de tarefas complexas, como compilação, testes e deployments. Ele utiliza builders, ferramentas especializadas, para realizar cada tarefa de acordo com as configurações definidas.

O Architect é uma espécie de shell que executa um builder especificado para realizar uma tarefa determinada, de acordo com uma configuração de target. Você pode definir e configurar novos builders e targets para estender o Angular CLI.

Builders e Targets Padrão

O Angular CLI já possui um conjunto de builders e targets padrão, prontos para serem utilizados em seus projetos. Cada builder possui um esquema JSON que define suas opções e configurações, permitindo que você personalize o comportamento de cada tarefa.

Os esquemas JSON que definem as opções e os padrões para cada um desses builders são coletados no pacote @angular-devkit/build-angular.

Os esquemas configuram opções para os seguintes builders:

BuilderDescrição
@angular-devkit/build-angular:browserCompila uma aplicação Angular para a web.
@angular-devkit/build-angular:dev-serverServe uma aplicação Angular em um servidor de desenvolvimento local.
@angular-devkit/build-angular:karmaExecuta testes unitários usando o framework Karma.
@angular-devkit/build-angular:ng-packagrCria pacotes para bibliotecas Angular.
@angular-devkit/build-angular:protractorExecuta testes end-to-end usando o Protractor.
@angular-devkit/build-angular:serverCompila uma aplicação Angular para ser executada no servidor.

Cada um desses builders possui opções configuráveis que permitem adaptar seu comportamento às necessidades do seu projeto.

Configurando Targets de Builders

Você pode especificar diferentes opções de configuração para cada target de builder, permitindo uma flexibilidade significativa no processo de construção do seu projeto. Por exemplo, você pode ter um target de build para desenvolvimento e outro para produção, cada um com suas próprias configurações específicas.

Dominando a Arquitetura: Configurando Targets no Angular CLI

No pergaminho do angular.json, a seção architect é o reino dos targets, os planos de construção que ditam como o Architect executará as tarefas no seu projeto. Cada target é um conjunto de instruções que define qual builder será usado e quais opções serão aplicadas para realizar uma determinada tarefa.

A Estrutura dos Targets

Cada target possui as seguintes propriedades:

  • builder: O nome do builder que será invocado pelo Architect para executar a tarefa.
  • options: As opções de configuração padrão para o target, que podem ser sobrescritas na linha de comando.
  • configurations: Configurações alternativas para o target, que podem ser selecionadas na linha de comando.

Targets Padrão

O Angular CLI oferece um conjunto de targets padrão para as principais tarefas do desenvolvimento:

PropriedadeDetalhes
buildConfigura padrões para as opções do comando ng build.
serveSobrescreve os padrões de build e fornece padrões adicionais para o comando ng serve. Além das opções disponíveis para o comando ng build, adiciona opções relacionadas a servir a aplicação.
e2eSobrescreve os padrões de build para construir aplicações de testes end-to-end usando o comando ng e2e.
testSobrescreve os padrões de build para testes e fornece padrões adicionais para a execução de testes com o comando ng test.
lintConfigura padrões para as opções do comando ng lint, que realiza análise estática de código nos arquivos de origem do projeto.
extract-i18nConfigura padrões para as opções do comando ng extract-i18n, que extrai strings de mensagens localizadas do código-fonte e gera arquivos de tradução para internacionalização.

Importante

Todas as opções no angular.json devem ser escritas em camelCase (ex: outputPath), não em kebab-case (ex: output-path).

A Arte da Construção: O Target build no Angular CLI

No pergaminho do angular.json, o target build é o plano mestre para construir sua aplicação Angular, transformando seu código em um artefato pronto para ser implantado no mundo real.

A Estrutura do Target build

O target build possui as seguintes propriedades:

PropriedadeDetalhes
builderO builder do CLI usado para criar este target, na forma <package-name>:<builder-name>.
optionsOpções padrão do target de build.
configurationsConfigurações alternativas para executar o target. Cada configuração define as opções padrão para aquele ambiente específico, sobrescrevendo o valor associado em options. Veja a seção “Configurações Alternativas de Build” abaixo.
Cada target sob architect possui as seguintes propriedades:

Personalizando o Target build

Você pode personalizar o target build para atender às suas necessidades específicas. Por exemplo, para desativar as otimizações durante o build, adicione a seguinte configuração no seu angular.json:

{
  "projects": {
    "my-app": {
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:application",
          "options": {
            "optimization": false
          }
        }
      }
    }
  }
}

Com esta configuração, o comando ng build gerará um build não otimizado da sua aplicação.

O target build oferece uma infinidade de opções para personalizar o processo de construção da sua aplicação. Você pode ajustar as configurações de saída, definir variáveis de ambiente, configurar o processo de empacotamento e muito mais.

A Magia da Versatilidade: Configurações Alternativas de Build

O Angular CLI, em sua sabedoria, oferece duas configurações de build: production e development. Por padrão, o feitiço ng build invoca a configuração production, que aplica otimizações para tornar sua aplicação mais leve e rápida, como:

  • Agrupar arquivos em bundles.
  • Remover espaços em branco, comentários e código morto.
  • Minificar o código, tornando-o mais compacto.

Mas a magia não para por aí! Você pode criar configurações alternativas, como staging ou test, para personalizar o build de acordo com suas necessidades. Para invocar uma configuração alternativa, use a bandeira --configuration na linha de comando:

ng build --configuration staging

Exemplo: Otimização Somente em Produção

Para habilitar otimizações apenas em builds de produção, adicione a seguinte configuração ao seu angular.json:

{
  "projects": {
    "my-app": {
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:application",
          "options": {
            "optimization": false
          },
          "configurations": {
            "production": {
              "optimization": true
            }
          }
        }
      }
    }
  }
}

Com esta configuração, o comando ng build gerará um build não otimizado, enquanto ng build --configuration production aplicará as otimizações.

Combinando Configurações

Você pode combinar múltiplas configurações usando uma lista separada por vírgulas. Por exemplo, para aplicar as configurações staging e french, use o comando:

ng build --configuration staging,french

O CLI processará as configurações da esquerda para a direita, e o último valor definido para cada opção prevalecerá.

Se várias configurações alterarem a mesma configuração, o último valor definido será o final. Neste exemplo, se ambas as configurações staging e french definirem o caminho de saída, o valor em french será utilizado.

O Poder da Personalização

As configurações alternativas de build oferecem um poder imenso para personalizar o processo de construção da sua aplicação. Você pode ajustar as opções de otimização, definir variáveis de ambiente específicas para cada configuração e muito mais.

Aperfeiçoando a Arte: Opções Extras de Build e Teste

A maestria na construção de aplicações Angular vai além dos targets padrão. O Angular CLI oferece um arsenal de opções extras para personalizar seus builds e testes, permitindo que você ajuste cada detalhe do processo.

Opções de Build

PropriedadeDetalhes
assetsUm objeto contendo os caminhos para os assets estáticos que serão servidos com a aplicação. Por padrão, inclui o ícone do projeto e a pasta assets. Você pode personalizar esta lista para incluir imagens, fontes, vídeos e outros recursos.
stylesUm array de arquivos CSS que serão adicionados ao contexto global do projeto. O Angular CLI suporta importação de CSS e os principais pré-processadores, como Sass, Less e Stylus.
stylePreprocessorOptionsUm objeto contendo pares de opção-valor para configurar os pré-processadores de estilo. Por exemplo, você pode definir a pasta de inclusão para o Sass (includePaths) ou habilitar o modo strict para o Less (strict).v
scriptsUm array de arquivos JavaScript que serão adicionados à aplicação. Os scripts são carregados como se estivessem dentro de tags <script> no index.html.
budgetsDefine limites de tamanho para a aplicação ou partes dela. Você pode configurar o builder para emitir avisos ou erros quando o tamanho do output atingir ou exceder um limite.
fileReplacementsUm objeto contendo arquivos e seus substitutos em tempo de compilação. Útil para substituir arquivos de configuração ou variáveis de ambiente em diferentes ambientes.
indexO documento HTML base que carrega a aplicação. Por padrão, é o arquivo index.html na raiz do projeto.
As opções configuráveis para um build padrão ou direcionado geralmente correspondem às opções disponíveis para os comandos ng build, ng serve e ng test.

Exemplo Prático: Trocando de Ambiente com fileReplacements

Para mostrar na prática como o Angular CLI pode turbinar seu fluxo de trabalho, vamos dar uma olhada em um exemplo prático usando a opção fileReplacements. Imagine que você tem diferentes arquivos de configuração para cada ambiente da sua aplicação (desenvolvimento, produção, etc.). Com fileReplacements, você pode facilmente trocar esses arquivos durante o build, sem precisar fazer alterações manuais.

Configurando o angular.json

No seu arquivo angular.json, dentro do target build, adicione a seguinte configuração:

{
  "projects": {
    "my-app": {
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            // ... outras opções
            "fileReplacements": [
              {
                "replace": "src/environments/environment.ts",
                "with": "src/environments/environment.prod.ts"
              }
            ]
          }
        }
      }
    }
  }
}

Nesta configuração, estamos dizendo ao Angular CLI para substituir o arquivo environment.ts pelo arquivo environment.prod.ts durante o build. Isso significa que, ao executar o comando ng build, a aplicação será construída com as configurações de produção.

Diferentes Ambientes, Diferentes Configurações

Você pode criar arquivos de ambiente para cada configuração que desejar, como environment.dev.ts para desenvolvimento, environment.staging.ts para staging e assim por diante. Para usar uma configuração específica, basta passar o nome da configuração como argumento para o comando ng build:

ng build --configuration=production  // Usará environment.prod.ts
ng build --configuration=staging    // Usará environment.staging.ts

A Magia da Automação

Com fileReplacements, você automatiza a troca de arquivos de configuração, eliminando a necessidade de fazer alterações manuais e reduzindo o risco de erros. Isso torna o processo de build mais eficiente e confiável, permitindo que você se concentre no que realmente importa: desenvolver sua aplicação Angular.

Desvendando a Complexidade: Valores Avançados de Configuração

A maestria na configuração do Angular exige o domínio de valores complexos, que oferecem um controle granular sobre o processo de build.
Nesta seção, exploraremos as nuances de assets, estilos, scripts, source maps, otimizações e outras configurações avançadas.

Assets: Os Tesouros do Seu Projeto

No coração do angular.json, a propriedade assets é o cofre onde você guarda seus tesouros: imagens, fontes, vídeos, ícones e outros arquivos que enriquecem sua aplicação Angular. Vamos explorar em detalhes como configurar este cofre para garantir que seus tesouros sejam copiados corretamente para a pasta de saída da sua aplicação.

A Estrutura dos Assets

Por padrão, o Angular CLI copia a pasta src/assets e o arquivo src/favicon.ico para a pasta de saída.

Mas você pode personalizar essa configuração usando um array de objetos, onde cada objeto representa um asset individual.

Um objeto de especificação de asset pode ter os seguintes campos:

CamposDetalhes
globUm padrão glob que define quais arquivos serão incluídos. Por exemplo, **/* inclui todos os arquivos na pasta de entrada, enquanto *.jpg inclui apenas arquivos JPEG.
inputO caminho de entrada relativo à raiz do workspace. Por exemplo, src/assets/images inclui todos os arquivos na pasta images dentro da pasta assets.
outputO caminho de saída relativo ao diretório de saída da aplicação. Por exemplo, /assets/images copia os arquivos para a pasta assets/images dentro do diretório de saída.
ignoreUm array de padrões glob que define quais arquivos serão excluídos. Por exemplo, ["*.txt"] exclui todos os arquivos de texto.
followSymlinksUm valor booleano que indica se links simbólicos devem ser seguidos. Por padrão, é false, o que significa que links simbólicos não são seguidos. Se você quiser incluir arquivos em subdiretórios de um link simbólico, defina este valor como true.

Exemplo Prático: Configurando Assets

Vamos ver um exemplo prático de como configurar os assets no seu angular.json:

"assets": [
  {
    "glob": "**/*",
    "input": "src/assets/",
    "output": "/assets/"
  },
  {
    "glob": "favicon.ico",
    "input": "src/",
    "output": "/"
  },
  {
    "glob": "*.svg",
    "input": "src/assets/icons/",
    "output": "/assets/icons/",
    "ignore": ["*.bak"] // Exclui arquivos de backup
  }
]

Nesta configuração, estamos:

  1. Copiando todos os arquivos da pasta src/assets para a pasta assets no diretório de saída.
  2. Copiando o arquivo favicon.ico para a raiz do diretório de saída.
  3. Copiando todos os arquivos SVG da pasta src/assets/icons para a pasta assets/icons no diretório de saída, exceto arquivos de backup (.bak).

Com esta configuração, seus assets estarão organizados e prontos para serem utilizados pela sua aplicação Angular.

A Beleza e o Cérebro da Aplicação: Configurando Estilos e Scripts no Angular

Em cada projeto Angular, os estilos e scripts são a alma e o corpo da sua aplicação, definindo a aparência e o comportamento. No angular.json, as propriedades styles e scripts permitem que você orquestre essa sinfonia de forma elegante e eficiente.

Estilos e Scripts: Uma Dança de Objetos e Caminhos

As propriedades styles e scripts podem receber tanto um simples caminho para o arquivo (como src/styles.css) quanto um objeto com configurações mais detalhadas:

CampoDescrição
inputO caminho para o arquivo de estilo ou script, relativo à raiz do projeto.
inject(Opcional) Um valor booleano que indica se o arquivo deve ser injetado automaticamente no HTML. O padrão é true.
bundleName(Opcional) O nome do bundle que será gerado para este arquivo. Útil para agrupar estilos ou scripts relacionados em um único arquivo, otimizando o carregamento da sua aplicação.
Exportar para as Planilhas

Exemplo

"styles": [
  {
    "input": "src/styles.scss",
    "inject": true
  },
  {
    "input": "node_modules/bootstrap/dist/css/bootstrap.min.css",
    "inject": false,
    "bundleName": "bootstrap-styles"
  }
],
"scripts": [
  {
    "input": "src/main.ts"
  },
  {
    "input": "node_modules/jquery/dist/jquery.min.js",
    "inject": false,
    "bundleName": "external-scripts"
  }
]

Neste exemplo, estamos:

  1. Incluindo o arquivo styles.scss na pasta src e injetando-o no HTML.
  2. Incluindo o Bootstrap, mas não injetando-o automaticamente. Em vez disso, criamos um bundle chamado bootstrap-styles para que você possa incluí-lo manualmente no HTML quando necessário.
  3. Incluindo o arquivo main.ts na pasta src.
  4. Incluindo o jQuery, mas não injetando-o automaticamente. Em vez disso, criamos um bundle chamado external-scripts.

stylePreprocessorOptions: Dominando os Pré-processadores

Se você utiliza um pré-processador CSS como Sass, Less ou Stylus, a propriedade stylePreprocessorOptions permite que você configure opções específicas para cada um deles.

Exemplo: Sass

"stylePreprocessorOptions": {
  "includePaths": ["src/styles"] 
}

Neste exemplo, estamos adicionando a pasta src/styles aos caminhos de inclusão do Sass. Isso permite que você importe arquivos Sass de qualquer lugar do seu projeto sem precisar usar caminhos relativos longos.

Dica: Se você precisar dos estilos ou scripts para seus testes unitários, adicione-os também ao builder test.

Com estas configurações, você pode organizar e otimizar seus estilos e scripts, garantindo que sua aplicação Angular tenha a aparência e o comportamento desejados.

A Arte da Otimização: Refinando a Performance no Angular

Em cada projeto Angular, a otimização é a chave para a performance, a rapidez e a eficiência que encantam seus usuários. No angular.json, a propriedade optimization é o seu laboratório de alquimia, onde você pode transformar seu código em um elixir de alta performance.

Otimização: Mais que um Simples Booleano

A propriedade optimization pode ser um simples booleano (true ou false), mas sua verdadeira magia se revela quando você a usa como um objeto, abrindo um mundo de possibilidades para personalizar a otimização do seu projeto.

Opções de Otimização

Várias opções podem ser usadas para ajustar a otimização de uma aplicação.

OpçõesDetalhesTipo de ValorValor Padrão
scriptsHabilita a otimização de scripts, incluindo minificação e eliminação de código morto.booleantrue
stylesHabilita a otimização de estilos, incluindo minificação e remoção de comentários. Você pode configurar opções adicionais para controlar o processo de otimização de estilos.booleanOpções de Otimização de Estilos
fontsHabilita a otimização de fontes, reduzindo o número de requisições e melhorando o carregamento da página. Requer acesso à internet para baixar as fontes otimizadas.booleanOpções de Otimização de Fontes
A opção de otimização pode ser um valor booleano ou um objeto para uma configuração mais detalhada.

Opções de Otimização de Estilos

OpçõesDetalhesTipo de ValorValor Padrão
minifyMinifica definições CSS removendo espaços em branco e comentários desnecessários, mesclando identificadores e minimizando valores.booleantrue
inlineCriticalExtrai e insere os estilos CSS críticos diretamente no HTML, melhorando o First Contentful Paint (FCP) e a experiência do usuário.booleantrue
removeSpecialCommentsRemove comentários em CSS global que contenham @license ou @preserve ou que comecem com //! ou /*!.booleantrue

Opções de Otimização de Fontes

OpçõesDetalhesTipo de ValorValor Padrão
inlineIncorpora as fontes externas (Google Fonts e Adobe Fonts) diretamente no arquivo HTML da sua aplicação, reduzindo o número de requisições e melhorando o desempenho de carregamento. Requer acesso à internet para baixar as fontes.booleantrue

Exemplo Prático: Otimizando Estilos e Scripts

Vamos ver um exemplo prático de como configurar a otimização no seu angular.json:

"optimization": {
  "scripts": true,
  "styles": {
    "minify": true,
    "inlineCritical": true
  },
  "fonts": true
}

Nesta configuração, estamos:

  1. Habilitando a otimização de scripts.
  2. Habilitando a otimização de estilos, incluindo minificação e inserção de estilos críticos.
  3. Habilitando a otimização de fontes.

Desvendando os Mapas da Criação: Source Maps no Angular

Em cada projeto Angular, os source maps são como mapas de tesouro que guiam você de volta ao código original, mesmo após a otimização e a minificação.
No angular.json, a propriedade sourceMap é a bússola que controla a geração desses mapas, revelando a origem de cada linha de código no seu projeto.

Source Maps: Mais que um Simples Booleano

A propriedade sourceMap pode ser um simples booleano (true ou false), mas sua verdadeira magia se revela quando você a usa como um objeto, abrindo um leque de opções para personalizar a geração de source maps.

Opções de Source Maps

OpçõesDetalhesTipo de ValorValor Padrão
scriptsHabilita a geração de source maps para arquivos JavaScript.booleantrue
stylesHabilita a geração de source maps para arquivos CSS.booleantrue
vendorHabilita a geração de source maps para bibliotecas de terceiros.booleanfalse
hiddenOmite a referência aos source maps nos arquivos JavaScript gerados, tornando-os invisíveis para as ferramentas de desenvolvimento do navegador. Útil para proteger seu código fonte em produção.booleanfalse

Desvendando os Mapas da Criação: Source Maps no Angular

Em cada projeto Angular, os source maps são como mapas de tesouro que guiam você de volta ao código original, mesmo após a otimização e a minificação. No angular.json, a propriedade sourceMap é a bússola que controla a geração desses mapas, revelando a origem de cada linha de código no seu projeto.

Source Maps: Mais que um Simples Booleano

A propriedade sourceMap pode ser um simples booleano (true ou false), mas sua verdadeira magia se revela quando você a usa como um objeto, abrindo um leque de opções para personalizar a geração de source maps.

Opções de Source Maps

OpçãoDescriçãoTipo de ValorValor Padrão
scriptsHabilita a geração de source maps para arquivos JavaScript.booleantrue
stylesHabilita a geração de source maps para arquivos CSS.booleantrue
vendorHabilita a geração de source maps para bibliotecas de terceiros.booleanfalse
hiddenOmite a referência aos source maps nos arquivos JavaScript gerados, tornando-os invisíveis para as ferramentas de desenvolvimento do navegador. Útil para proteger seu código fonte em produção.booleanfalse

Exportar para as Planilhas

Exemplo Prático: Configurando Source Maps

Vamos ver um exemplo prático de como configurar os source maps no seu angular.json:

"sourceMap": {
  "scripts": true, // Gera source maps para scripts
  "styles": false, // Não gera source maps para estilos
  "hidden": true,  // Oculta source maps nos arquivos JavaScript
  "vendor": true   // Gera source maps para bibliotecas de terceiros
}

Source Maps Ocultos: O Segredo da Segurança

Os source maps ocultos são uma ferramenta poderosa para proteger seu código fonte em produção. Ao omitir a referência aos source maps nos arquivos JavaScript, você impede que eles sejam acessados pelas ferramentas de desenvolvimento do navegador, tornando seu código mais difícil de ser decifrado por olhos curiosos.

Importante: Mesmo com source maps ocultos, é crucial garantir que os arquivos de source map não sejam servidos em produção, pois eles ainda contêm informações sobre o seu código original.

Com os source maps, você tem a chave para desvendar os mistérios do seu código Angular, mesmo após a otimização e a minificação. Use-os com sabedoria para facilitar a depuração e proteger seu código fonte.

A Porta de Entrada: Configurando o Index no Angular

O arquivo index.html é a porta de entrada para sua aplicação Angular, o primeiro contato do usuário com seu mundo de código. No angular.json, a propriedade index permite que você personalize esse ponto de entrada, definindo qual arquivo será usado e onde ele será gerado.

Opções do Index

A propriedade index pode ser uma string simples, indicando o caminho do arquivo index.html, ou um objeto com as seguintes opções:

Opções de Index

OpçõesDetalhesTipo de ValorValor Padrão
inputO caminho do arquivo que será usado como base para o index.html gerado.stringNenhum (obrigatório)
outputO caminho de saída do arquivo index.html gerado. O caminho completo será usado e considerado relativo ao diretório de saída da aplicação.stringindex.html

A Porta de Entrada: Configurando o Index no Angular

O arquivo index.html é a porta de entrada para sua aplicação Angular, o primeiro contato do usuário com seu mundo de código. No angular.json, a propriedade index permite que você personalize esse ponto de entrada, definindo qual arquivo será usado e onde ele será gerado.

Opções do Index

A propriedade index pode ser uma string simples, indicando o caminho do arquivo index.html, ou um objeto com as seguintes opções:

OpçãoDescriçãoTipo de ValorValor Padrão
inputO caminho do arquivo que será usado como base para o index.html gerado.stringNenhum (obrigatório)
outputO caminho de saída do arquivo index.html gerado. O caminho completo será usado e considerado relativo ao diretório de saída da aplicação.stringindex.html

Exportar para as Planilhas

Exemplo Prático: Personalizando o Index

Vamos ver um exemplo prático de como personalizar o arquivo index.html no seu angular.json:

"index": {
  "input": "src/index.template.html",
  "output": "meu-index.html"
}

Nesta configuração, estamos:

  1. Usando o arquivo src/index.template.html como base para gerar o arquivo index.html.
  2. Gerando o arquivo index.html com o nome meu-index.html no diretório de saída da aplicação.

Index e Ambientes

Você pode usar diferentes arquivos index.html para cada ambiente da sua aplicação, como index.prod.html para produção e index.dev.html para desenvolvimento. Para isso, basta criar os arquivos correspondentes e configurar o angular.json para usar o arquivo correto em cada ambiente.

"configurations": {
  "production": {
    "index": {
      "input": "src/index.prod.html"
    }
  },
  "development": {
    "index": {
      "input": "src/index.dev.html"
    }
  }
}

Com esta configuração, o comando ng build --configuration=production usará o arquivo index.prod.html, enquanto ng build --configuration=development usará o arquivo index.dev.html.

A Porta de Entrada para a Sua Aplicação

O arquivo index.html é a primeira impressão que o usuário terá da sua aplicação Angular. Personalize-o com cuidado, utilizando as opções do angular.json para garantir que ele seja gerado corretamente e que atenda às necessidades do seu projeto.

O Destino Final: Configurando o Caminho de Saída no Angular

No pergaminho do angular.json, a propriedade outputPath é o mapa que guia o Angular CLI para o destino final dos seus artefatos de build. Com ele, você controla onde os arquivos gerados serão armazenados, organizando seu reino de código com maestria.

Opções do Caminho de Saída

A propriedade outputPath pode ser uma string simples, indicando o caminho base de saída, ou um objeto com as seguintes opções:

Várias opções podem ser usadas para ajustar a estrutura de saída de uma aplicação.

OpçõesDetalhesTipo de ValorValor Padrão
baseO caminho base de saída relativo à raiz do workspace. Todos os outros caminhos de saída serão relativos a este caminho base.string
browserO nome do diretório de saída para o build do navegador, dentro do caminho base. Este diretório contém os arquivos que serão servidos aos usuários.stringbrowser
serverO nome do diretório de saída para o build do servidor, dentro do caminho base. Este diretório contém os arquivos que serão executados no servidor Node.js.stringserver
mediaO nome do diretório de saída para arquivos de mídia (imagens, fontes, etc.), dentro do diretório de saída do navegador.string

Exemplo Prático: Personalizando o Caminho de Saída

Vamos ver um exemplo prático de como personalizar o caminho de saída no seu angular.json:

"outputPath": {
  "base": "dist",
  "browser": "my-app/browser",
  "server": "my-app/server"
}

Nesta configuração, estamos:

  1. Definindo o caminho base de saída como dist.
  2. Gerando o build do navegador na pasta dist/my-app/browser.
  3. Gerando o build do servidor na pasta dist/my-app/server.

Caminhos de Saída e Ambientes

Você pode definir diferentes caminhos de saída para cada ambiente da sua aplicação, como dist/prod para produção e dist/dev para desenvolvimento. Para isso, basta adicionar as configurações correspondentes à seção configurations do seu target de build.

"configurations": {
  "production": {
    "outputPath": {
      "base": "dist/prod"
    }
  },
  "development": {
    "outputPath": {
      "base": "dist/dev"
    }
  }
}

O Destino Final do Seu Código

A propriedade outputPath é o último passo na jornada de configuração do seu projeto Angular. Com ela, você define o destino final dos seus artefatos de build, garantindo que eles sejam organizados e estejam prontos para serem implantados no mundo.

Dominando o angular.json: O Mapa da Maestria Angular

O arquivo angular.json é o coração pulsante do seu projeto Angular, um pergaminho enigmático que guarda os segredos da configuração e do controle.
Desvendamos cada página deste grimório, revelando as opções que moldam o Angular CLI, os projetos individuais, os esquemas que guiam a criação, os builders que constroem, os targets que definem as tarefas e as nuances da otimização.

O Poder do angular.json em Suas Mãos

Com o conhecimento adquirido nesta jornada, você está pronto para:

  • Personalizar o Angular CLI: Ajustar o comportamento do mago que invoca seus projetos, controlando o cache, os avisos e o gerenciador de pacotes.
  • Moldar seus projetos: Configurar cada projeto individualmente, definindo seu tipo, raiz, prefixo e esquemas.
  • Orquestrar a construção: Dominar o Architect e seus builders, personalizando os targets para otimizar o processo de build.
  • Otimizar a performance: Aplicar técnicas de otimização para tornar sua aplicação mais leve, rápida e eficiente.
  • Controlar o destino dos seus artefatos: Definir o caminho de saída dos arquivos gerados, garantindo uma estrutura organizada e eficiente.

A Jornada Continua

O angular.json é apenas o começo da sua jornada rumo à maestria no Angular.
Continue explorando as profundezas deste framework, desvendando seus segredos e dominando suas ferramentas. Com dedicação e perseverança, você se tornará um mestre Angular, capaz de construir aplicações web poderosas e eficientes que encantam seus usuários.

Compartilhe a Sabedoria Angular com o Mundo!

Domine o angular.json e desvende os segredos da configuração do Angular. Compartilhe este guia com seus colegas no LinkedIn e ajude-os a alcançar a maestria no desenvolvimento web.

Compartilhe agora e inspire a comunidade Angular!

Deixe seu Legado nos Comentários!

Compartilhe suas experiências, dúvidas e descobertas nos comentários abaixo. Vamos construir juntos um conhecimento mais profundo sobre o Angular e suas ferramentas.

Comments are closed.