This content originally appeared on DEV Community and was authored by Gustavo Machado
O que são cada item e para que serve?
Confira a definição e função básica de cada item presente neste artigo, que compõe a arquitetura de um projeto Frontend.
1. ESLint
Definição
- É um linter (ou seja, um analisador de código) que percorre o código procurando por problemas.
- Baseia-se em regras configuráveis, que podem ser habilitadas ou desativadas conforme a necessidade do projeto.
Função
- Garantir qualidade do código
- Manter consistência
- Prevenir bugs
- Melhorar a manutenção
- Integração com o fluxo de trabalho
2. Prettier
Definição
- O Prettier é um formatador de código opinativo.
- Ele não analisa regras de qualidade ou possíveis bugs como o ESLint.
- O foco dele é padronizar a formatação do código automaticamente, sem precisar discutir estilo no time.
Função
- Formatação consistente
- Decide automaticamente coisas como:
- Tamanho da indentação (2 ou 4 espaços)
- Uso de ponto e vírgula no final de linhas
- Aspas simples ou duplas
- Quebra de linha em funções longas
- Espaços em branco e vírgulas finais
- Economizar tempo
- Integração automática
3. Husky
Definição
- O Husky é uma ferramenta que permite configurar Git hooks facilmente.
- Git hooks são scripts que o Git executa automaticamente em momentos específicos, como antes de um commit (pre-commit) ou antes de um push (pre-push).
Função
- Garantir qualidade no commit
- Rodar o ESLint e o Prettier antes de permitir o commit.
- Rodar testes automaticamente
- Impedir que alguém faça commit/push se os testes quebraram.
- Aplicar verificações personalizadas
- Conferir mensagens de commit.
- Rodar ferramentas de segurança ou de build.
Passos para instalação das ferramentas no Angular:
- Adicionar e Configurar o ESLint
- Adicionar e configurar o Prettier
- Configuração da integração do ESLint
- Configuração de scripts no
package.json
- Instalar e configurar o husky
1. Adicionar e Configurar o ESLint
Começamos instalando o ESLint no projeto Angular. Isso irá criar um arquivo eslint.config.js
no seu diretório raiz.
ng add @angular-eslint/schematics
2. Adicionar e configurar o Prettier
Agora, vamos instalar o Prettier junto com as recomendadas integrações com o ESLint.
Instale o prettier:
npm install --save-dev prettier
Também instale o pretty-quick
:
npm install --save-dev pretty-quick
pretty-quick
é bem útil porque ele roda só nos arquivos staged, e não no projeto inteiro.
Depois instale os plugins para compatibilidade com o ESLint:
npm install --save-dev eslint-config-prettier eslint-plugin-prettier
Crie um arquivo chamado .prettierrc
no diretório raiz do seu projeto:
{
"printWidth": 100,
"tabWidth": 2,
"useTabs": false,
"singleQuote": true,
"trailingComma": "all",
"semi": true,
"bracketSpacing": true,
"arrowParens": "always",
"endOfLine": "auto",
"htmlWhitespaceSensitivity": "ignore",
"embeddedLanguageFormatting": "auto"
}
Crie um arquivo chamado .prettierignore
para que o prettier os ignore e não os formate:
package.json
package-lock.json
dist
node_modules
3. Configuração da integração do ESLint
// @ts-nocheck
const eslint = require("@eslint/js");
const tseslint = require("typescript-eslint");
const angular = require("angular-eslint");
const prettierPlugin = require("eslint-plugin-prettier");
const prettierConfig = require("eslint-config-prettier");
module.exports = tseslint.config(
{
files: ["**/*.ts"],
extends: [
eslint.configs.recommended,
...tseslint.configs.recommended,
...tseslint.configs.stylistic,
...angular.configs.tsRecommended,
prettierConfig,
],
plugins: {
prettier: prettierPlugin,
},
processor: angular.processInlineTemplates,
rules: {
"@angular-eslint/directive-selector": [
"error",
{
type: "attribute",
prefix: "app",
style: "camelCase",
},
],
"@angular-eslint/component-selector": [
"error",
{
type: "element",
prefix: "app",
style: "kebab-case",
},
],
"prettier/prettier": [
"error",
{
endOfLine: "auto",
},
],
"@typescript-eslint/no-explicit-any": "error", // Forbid usage of 'any'
},
},
{
files: ["**/*.html"],
extends: [
...angular.configs.templateRecommended,
...angular.configs.templateAccessibility,
],
rules: {},
},
);
4. Configuração de scripts no package.json
Nesta etapas vamos automatizar alguns comandos da aplicação para serem executadas através de scripts no package.json
.
"lint": "ng lint",
"pretty-quick": "pretty-quick --staged",
"lint:fix": "ng lint --fix",
"format": "prettier --write .",
"format:staged": "pretty-quick --staged",
Agora tente rodar o comando do lint
:
npm run lint
Caso erros de formatação aparecer do Prettier
, rode o comando:
npm run format
5. Instalar e configurar o husky
No passo 5, vamos instalar e configurar o husky para podermos executar as ferramentas anteriores ao fazer commits
e pushes
.
npx husky-init && npm install
#ou
npx husky-init; npm install
Isso cria um arquivo .husky
e um arquivo de hook (gancho) para pre-commit
.
Agora edite o arquivo de pre-commit
:
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npm run format:staged
npm run lint
Além do pre-commit
, adicionaremos também um pre-push
:
npx husky add .husky/pre-push "npm run test"
O arquivo irá ter as seguintes configurações (este arquivo executará testes unitários nos pushes do GIT):
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npm run test
Desde já agradeço a todos e espero que tenham gostado!
Att.
Gustavo Machado Pontes
linktr linkedin github instagram twitter
This content originally appeared on DEV Community and was authored by Gustavo Machado