Olá! Seja bem-vindo a este curso de Qualidade de Código: linting, testes e pipelines CI/CD. Meu nome é Pedro Celestino de Mello.
Audiodescrição: Pedro é um homem careca, com barba e usa uma boina.
Neste curso, vamos discutir sobre qualidade de código. Vamos entender o que podemos fazer, enquanto pessoas desenvolvedoras, para garantir a qualidade mínima do projeto.
O que queremos dizer com isso? Vamos configurar um linter para identificar possíveis erros no nosso código, seja por excesso ou falta de elementos. Além disso, aprenderemos a configurar um formatador para garantir que todos os arquivos do projeto sigam a mesma estrutura de indentação, uso de ponto e vírgula, entre outros aspectos.
Também aprenderemos a realizar ações antes de efetuar um commit, para garantir que tudo esteja correto.
Nós também vamos ver como integrar tudo isso nas GitHub Actions, e vamos executar lint, Prettier, testes de unidade e testes end-to-end. Se o teste end-to-end falhar, faremos o upload da tela no momento da falha. Vamos aprender vários conceitos importantes para garantir a qualidade e a integridade do projeto ao longo de sua vida útil.
Vamos utilizar um projeto já pronto, sem aumentar suas funcionalidades, mas focando em garantir a qualidade e assegurar que ele siga boas práticas, mesmo sem a necessidade de revisão humana constante. Vamos explorar como automatizar esses processos e entender diversas ferramentas para alcançar esse resultado. Embora o foco seja no React, desta vez não vamos nos aprofundar tanto no React em si, mas sim nas ferramentas de automação.
Esperamos que estejam tão animados quanto nós, e já estamos aguardando vocês no próximo vídeo. Prometemos que não vamos a lugar algum. Vamos garantir a qualidade dos nossos projetos.
Vamos garantir que nosso projeto esteja de acordo com todas as métricas de qualidade. Hoje, estamos com um projeto clonado, o CodeConnect, que já desenvolvemos em cursos anteriores. Deixaremos um link para baixar a versão exatamente igual à nossa, caso desejem. Ele possui algumas funcionalidades adicionais em relação a testes de unidade e testes end-to-end. O link estará disponível na seção de preparação de ambiente para download. Trata-se de um projeto React normal, com múltiplas páginas utilizando o React Router. Nesta aula, não focaremos no desenvolvimento de telas, mas sim em garantir a qualidade do código.
Começaremos com uma ferramenta muito conhecida no universo JavaScript, chamada ESLint. A ideia do ESLint, conforme descrito no site eslint.org, é analisar estaticamente o código em busca de problemas conhecidos. Ele nos ajuda a identificar erros antes que o código vá para produção. O ESLint já possui suporte à maioria dos editores de texto, como o VS Code, que utilizaremos aqui, além de ferramentas para integração contínua (CI/CD) e pipelines.
Antes de entrarmos no CodeConnect, vamos mostrar algo interessante. Quando criamos um aplicativo usando o Vite, que está documentado em vite.dev/guide, ele já traz uma configuração do ESLint por padrão. Vamos demonstrar isso rapidamente. Entraremos na área de trabalho e executaremos o comando:
npx create-vite@latest novo-projeto --template react
Alteraremos o nome do projeto para "novo-projeto", apenas para verificar o que vem configurado por padrão. Após a execução, verificaremos se há alguma reclamação do sistema. Caso haja, ajustaremos conforme necessário. Em seguida, entraremos no "novo-projeto" e o abriremos no VSCode:
cd novo-projeto/
code .
Não é necessário que todos façam isso, é apenas uma demonstração para mostrar o que está configurado por padrão.
Vamos aumentar um pouco o zoom para focar no arquivo eslint.config.js. Esse arquivo já possui várias definições por padrão. Ele especifica os globalIgnores, os arquivos que queremos observar, e o que estamos estendendo. Estamos estendendo as configurações padrão recomendadas do JavaScript, react-hooks, react-refresh, entre outras opções da linguagem. Também define qual é a versão do ECMAScript que estamos usando e o que temos de global, referindo-se a variáveis globais. As opções de parser e uma configuração específica para o JSX também estão presentes.
Aqui está um exemplo de como esse arquivo pode ser configurado:
import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import { defineConfig, globalIgnores } from 'eslint/config'
export default defineConfig({
globalIgnores: ['dist'],
files: ['**/*.{js,jsx}'],
extends: [
js.configs.recommended,
reactHooks.configs['recommended-latest'],
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
parserOptions: {
ecmaVersion: 'latest',
ecmaFeatures: { jsx: true },
sourceType: 'module',
},
},
rules: {
'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }],
},
});
Há uma regra que diz respeito a no-unused-vars, ou seja, não queremos declarar variáveis que não são utilizadas. O Vite já traz essa configuração para nós. Podemos até fechar ou deletar essa parte, pois não vamos modificá-la agora. Apenas queríamos mostrar que ela já vem por padrão.
Agora, podemos focar no nosso projeto, que possui uma configuração ESLint idêntica, pois também foi criado utilizando o Vite. Ele já traz todas as regras que podemos definir, com uma recomendação inicial do que precisamos seguir. Se quisermos personalizar isso, podemos acessar o site da documentação em eslint.org. No get started, seremos direcionados para a documentação, que explica tudo o que podemos fazer em termos de configuração, desde as extensões que queremos observar até os plugins e regras que vamos definir.
Para saber mais e se aprofundar no poder dessa ferramenta e sua capacidade de configuração, recomendo explorar a documentação. No vídeo, vamos focar em entender o que temos no projeto atualmente.
O que devemos lembrar dessa discussão é que, ao criar uma aplicação com o Vite, ele já nos fornece uma configuração padrão. Vamos trabalhar a partir dessa configuração para entender o que precisamos fazer. Com tudo isso configurado e discutido, estamos prontos para começar a trabalhar no terminal e rodar alguns testes.
Estou aguardando vocês no próximo vídeo. Até lá!
Agora, seguindo nossa sequência, vamos explorar a ferramenta Prettier. Basicamente, o Prettier é uma ferramenta que torna nosso código mais organizado e elegante. A ideia principal do Prettier é definir um conjunto de regras relacionadas à indentação, como se será utilizado espaço ou tabulação, se serão quatro ou dois espaços, se devemos colocar ponto e vírgula, entre outras opções. Podemos definir várias regras diferentes.
A primeira ação que devemos realizar é instalar o Prettier. Já estamos na documentação em prettier.io/docs/install, e vamos copiar o comando para instalar o Prettier dentro do VSCode. Após abrir o terminal, realizamos a instalação com o seguinte comando:
npm install --save-dev --save-exact prettier
Com o Prettier instalado, o próximo passo é configurá-lo. Para isso, criamos um arquivo na raiz do projeto. A documentação relevante já está disponível, e o arquivo que devemos criar é o .prettierrc.
Vamos criar um novo arquivo na raiz do projeto chamado .prettierrc. Nele, salvaremos nossa configuração. Por exemplo, podemos definir que devemos usar ponto e vírgula, que a indentação será de quatro espaços, se queremos aspas simples, entre outras opções. Aqui está um exemplo de configuração básica:
{
"trailingComma": "es5",
"tabWidth": 4,
"semi": false,
"singleQuote": true
}
Essa é uma configuração básica, mas podemos definir muitas outras opções. Não é necessário memorizar todas as regras, pois temos a documentação para consulta. Uma vez que o .prettierrc está configurado, temos uma configuração pronta para ser aplicada.
Agora, precisamos executar o Prettier para verificar se tudo está correto. Podemos consultar a documentação para isso. Na seção de uso, encontramos o CLI. Existem duas formas de executar o Prettier. A primeira é utilizando o comando com a flag --write, que corrige automaticamente o que não estiver de acordo. A segunda opção é --check, que apenas valida se está correto, sem corrigir automaticamente, apenas apontando problemas.
Vamos abrir o package.json e criar dois scripts personalizados para executar o Prettier. O primeiro comando será chamado de format, relacionado ao formato do código, e o comando será:
"format": "prettier . --write",
O segundo comando será format:check, que apenas valida, utilizando:
"format:check": "prettier . --check",
Com tudo configurado, abrimos o terminal e executamos npm run format:check. O Prettier analisará todos os arquivos do projeto e indicará se há algo a corrigir. Por exemplo, ele pode encontrar problemas em 89 arquivos, o que significa que há muitas correções a serem feitas.
Para manter o projeto do curso bem organizado, vamos criar um commit. Primeiro, executamos o comando:
git add .
E, em seguida, fazemos o commit:
git commit -am 'video 1.4 - antes do format'
Estamos no vídeo 4 desta aula, e vamos adicionar um traço antes do format para manter a divisão clara. Inicialmente, configuramos o ambiente, e agora vamos solicitar ao Prettier que organize o código para nós.
Executamos o comando:
npm run format
O Prettier modificou praticamente tudo, exceto o .gitignore, organizando todos os arquivos com base na configuração padrão e mínima recomendada pelo próprio Prettier. Isso significa que não precisamos fazer ajustes manuais.
Por exemplo, ao observar um componente React, notamos que o Prettier remove quebras de linha desnecessárias e espaços em branco, além de adicionar uma linha ao final do arquivo. Ele aplica essas configurações em todos os arquivos. Após isso, podemos fazer outro commit com a mensagem:
git commit -am 'video 1.4 - arquivos formatados'
O Prettier padroniza o estilo do código, independentemente do estilo que definirmos. Utilizamos o arquivo .prettierrc para especificar todas as regras que desejamos seguir. Além disso, podemos criar um arquivo .prettierignore para listar os arquivos que queremos que o Prettier ignore, como arquivos .md, por exemplo:
*.md
Isso nos permite formatar o código, mas considerando uma lista de exclusão.
Outro ponto importante é evitar conflitos entre as regras do Prettier e do ESLint. Para isso, podemos integrar um plugin no nosso arquivo de configuração do ESLint. A documentação está disponível no GitHub, no repositório github.com/prettier/eslint-config-prettier. Instalamos essa dependência com o comando:
npm i -D eslint-config-prettier
Configuramos o plugin importando eslint-config-prettier. No arquivo de configuração do ESLint, aplicamos um spread das regras do Prettier dentro das regras para JS, JSX e Cypress:
import eslintConfigPrettier from 'eslint-config-prettier'
...eslintConfigPrettier.rules,
Isso garante que não haverá conflitos entre o Prettier e o ESLint, unificando as regras.
Podemos verificar se tudo está correto executando npm run lint no terminal, para garantir que não há erros, e npm run format:check para confirmar que tudo está conforme o esperado.
O ponto principal é que o Prettier é uma ferramenta que nos permite executar comandos para aplicar correções automáticas, evitando ajustes manuais, e validar se tudo está correto. O coração do Prettier são as regras que escolhemos seguir, garantindo que tanto a lintagem quanto a formatação do código estejam alinhadas com o nosso projeto.
O curso React: garantindo qualidade de código e automações de deploy possui 100 minutos de vídeos, em um total de 35 atividades. Gostou? Conheça nossos outros cursos de React em Front-end, ou leia nossos artigos de Front-end.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
2 anos de Alura
Matricule-se no plano PLUS 24 e garanta:
Jornada de estudos progressiva que te guia desde os fundamentos até a atuação prática. Você acompanha sua evolução, entende os próximos passos e se aprofunda nos conteúdos com quem é referência no mercado.
Mobile, Programação, Front-end, DevOps, UX & Design, Marketing Digital, Data Science, Inovação & Gestão, Inteligência Artificial
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você participa de eventos exclusivos, pode tirar dúvidas em estudos colaborativos e ainda conta com mentorias em grupo com especialistas de diversas áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
2 anos de Alura
Todos os benefícios do PLUS 24 e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Para estudantes ultra comprometidos atingirem seu objetivo mais rápido.
2 anos de Alura
Todos os benefícios do PRO 24 e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.
Conecte-se ao mercado com mentoria individual personalizada, vagas exclusivas e networking estratégico que impulsionam sua carreira tech para o próximo nível.