Skip to content

Schematic para gerar código bolierplate com a arquitetura de referência para aplicações Angular

License

Notifications You must be signed in to change notification settings

wizsolucoes/angular-starter-schematic

Repository files navigation

Wiz Angular Starter Schematic

Sobre

Schematic para gerar código boilerplate com a arquitetura de referência corporativa para aplicações Angular. Compatível somente com aplicações Angular 14.

Uso

IMPORTANTE: Este schematic supõe que a aplicação usa SASS e deve ser executado em projetos novos, pois faz a sobrescrita de arquivos.

# Gerar uma nova aplicação Angular
ng new my-app --style=scss

# Entrar na pasta da nova aplicação
cd my-app

# Adicionar arquitetura
ng add @wizsolucoes/angular-starter

# Executar testes
npm run test:ci

# Executar lint
ng lint

# Rodar aplicação
ng serve

Obs: Se você estiver usando o Git Bash e encontrar um erro ao executar ng add @wizsolucoes/angular-starter, execute o comando no Terminal do VSCode ou em PowerShell.

Obs: É necessário fazer a configuração da biblioteca NGX Wiz SSO para explorar as funcionalidades do Starter.

Opções

White-label

Ao executar o schematic, você deve escolher se a aplicação é 'White-label' ou não, respondendo este prompt na linha de comando:

? Essa aplicação é 'White-Label'? (Y/n)

Para entender mais sobre a arquitetura 'White-label', consulte a documentação neste repositório.

Sobre a aplicação gerada

Estrutura

A aplicação tem 2 partes principais:

  • A parte "eager" que será carregada na inicialização na aplicação (o main.js bundle).
  • A parte "lazy" composta por funcionalidades da aplicação e que será carregada sob demanda como resultado da navegação do usuário.

"arquitetura da aplicação"

Esta é a estrutura de pastas proposta:

|-- core
    |-- [ ] authentication
    |-- [ ] guards
    |-- [ ] http
    |-- [ ] interceptors
    |-- [ ] mocks
    |-- [ ] services
    |-- [ ] layout

|-- features
    |-- feature1
        |-- feature1-routing.module.ts
        |-- feature1.component.html
        |-- feature1.component.scss
        |-- feature1.component.ts
        |-- feature1.component.spec.ts
        |-- feature1.service.ts
        |-- feature1.module.ts

    |-- feature2 
        |-- [ ] components
        |-- feature2-routing.module.ts
        |-- feature2.service.ts
        |-- feature2.module.ts

|-- shared
    |-- [ ] components
    |-- [ ] models
    |-- [ ] directives
    |-- [ ] pipes

|-- app-routing.module.ts
|-- app.component.html
|-- app.component.scss
|-- app.component.ts
|-- app.component.spec.ts
|-- app.module.ts

Core

O core module deve conter serviços singleton, componentes universais e outros recursos em que há uma instância única. Autenticação, header, interceptors são exemplos de componentes que terá apenas uma instância ativa para a aplicação e será utilizado praticamente por todos os modules.

Features - Módulos Lazy Loaded

Módulos lazy loaded ajudam a diminuir o tempo de inicialização da aplicação. Com o lazy load, o aplicativo não precisa carregar tudo de uma só vez. Ele só vai carregar o que o usuário espera ver. O módulo só irá carregar quando o usuário navegar para sua rota.

Observe que se o módulo de feature tiver mais de um componente, criamos sub-pastas para a cada componente (Ex. feature2) para que nenhuma pasta tenha mais de 6 arquivos conforme a recomendação do style guide do Angular.

Para gerar um novo módulo lazy loaded use a o schematic ng generate module com a flag --route. Por exemplo, para gerar uma nova rota /privacy:

ng g m features/privacy --route privacy --module app.module.ts

Shared

O shared é onde todos os componentes compartilhados, pipes, filters e services devem ir. O shared pode ser importado em qualquer module. Assim esses itens serão reutilizados. O shared module deve ser independente do restante do aplicativo. Portanto, não deve ter referências de outro módulo.

Referências

A estrutura é inspirada nas seguintes fontes:

Recursos

O seguintes recursos já estão implementados na aplicação starter. Para alguns dos recursos é necessário fazer uma configuração antes de utilizá-los.

Integração NGX Wiz SSO

Integração com NGX Wiz SSO. Um módulo Angular feito para facilitar processo de autenticação e renovação de token no SSO da Wiz.

Configuração SSO

Adicione as configurações de SSO do seu projeto aos arquivos da pasta src/environments.

ssoConfig: {
    apiPath: '<<urldo servico>>',
    clientID: '<<Cliente ID>>',
    clientSecret: '<<Cliente Secret>>',
    grantType: '<<Grant Type>>',
    authedPaths: ['<<dns a ser autenticado>>'],
    scope: '<<scope do projeto>>',
    options: {
      // parâmetro opcional
      ssoTimeOut: 60000, // parâmetro opcional, determina o timeout para o SSO
      tokenAutoRefresh: true, // parâmetro opcional, determina se o token deve ser renovado
      loginRoute: 'login', // url que aponta para onde redirecionar no caso de não haver token
    },

O módulo do NGX Wiz SSO está importado no CoreModule.

@NgModule({
  declarations: [MainLayoutComponent, NavComponent],
  imports: [
    BrowserModule,
    RouterModule,
    HttpClientModule,
    NgxWizSSOModule.forRoot(environment.ssoConfig), // <--- import do NGX Wiz SSO
  ],
  exports: [MainLayoutComponent, NgxWizSSOModule],
})
export class CoreModule {}

O componente login tem um botão de "Entrar" que exemplifica como usar o plugin. Para entender melhor as configurações consulte a documentação do projeto NGX Wiz SSO.

Monitoramento com Application Insights

Monitoramento de erros e de performance da aplicação Angular usando o Azure Application Insights.

Configuração Application Insights

Adicione sua chave de instrumentação ao arquivo de variáveis por ambiente:

export const environment = {
  production: true,
  appInsights: {
    instrumentationKey: 'YOUR-APPLICATION-INSIGHTS-INSTRUMENTATION-KEY',
  },
};

Commit lint

As mensagens de commit devem seguir a convenção de Conventional commits que é o padrão para todos os projetos da Wiz. Este projeto já tem commit lint configurado com husky para te ajudar. Consulte a convenção Angular se tiver dúvidas sobre o tipo correto para seu commit.

Configuração Prettier

O código gerado contem arquivos de configuração da ferramenta de formatação Prettier e cria dois scripts npm:

  "scripts": {
    "//": "...",
    "format:check": "prettier **/*.{html,ts,js,json,scss} --check",
    "format:write": "prettier **/*.{html,ts,js,json,scss} --write"
  },

ReCAPTCHA

Implementação de Google ReCAPTCHA na tela de login. Adicione a chave pública do seu projeto aos arquivos da pasta src/environments.

export const environment = {
  ...
  reCaptcha: {
    siteKey: 'YOUR-RECAPTCHA-KEY',
  },
};

CI/CD

O código gerado irá conter um arquivo azure-pipelines.yml com a configuração de integração contínua de de deploy da aplicação.

Desenvolvimento do schematic

Por onde começar

# Clonar o repositório
git clone [email protected]:wizsolucoes/angular-starter-schematic.git

# Entrar na pasta do schematic
cd angular-starter-schematic

# Instalar as dependências
npm install

# Buildar schematic
npm run build

# Executar os testes
npm test

Testando o schematic localmente

Para testar o schematic localmente, você pode gerar um distribuível do schematic, instalar como pacote em uma aplicação angular ou você pode executar o schematic referenciando o código fonte diretamente.

1. Gerando um distribuível do schematic

1a. Gere um distribuível do schematic

# Instalar as dependências
npm install

# Buildar schematic
npm run build

# Gerar tarball eg. wizsolucoes-angular-starter-1.0.1.tgz
npm pack

1b. Gere uma nova aplicação e instale e execute o schematic

# Gerar uma nova aplicação Angular em outra pasta para testar o schematic
ng new my-app --style=scss

# Entrar na pasta da nova aplicação
cd my-app

# Instalar o distribuível do schematic
npm i --no-save ../<path-to>/angular-starter-schematic/wizsolucoes-angular-starter-x.x.x.tgz

# Executar schematic
ng g @wizsolucoes/angular-starter:ng-add

2. Executando o schematic referenciando o código fonte

2a. Faça o build do schematic

# Instalar as dependências
npm install

# Buildar schematic
npm run build

2b. Execute com a CLI @angular-devkit/schematics-cli

(É preciso ter instalado a CLI com ng i -g @angular-devkit/schematics-cli)

# Gerar uma nova aplicação Angular em outra pasta para testar o schematic
ng new my-app --style=scss

# Entrar na pasta da nova aplicação
cd my-app

# Exeucutar o schematic com @angular-devkit/schematics-cli
schematics ../<path-to>/angular-starter-schematic/src/collection.json:starter

Aprenda mais sobre schematics