<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vitor DevSP</title>
    <description>The latest articles on DEV Community by Vitor DevSP (@vitordevsp).</description>
    <link>https://dev.to/vitordevsp</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F646047%2F4f0081fc-0759-45cd-a478-a47bc869c6d8.png</url>
      <title>DEV Community: Vitor DevSP</title>
      <link>https://dev.to/vitordevsp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vitordevsp"/>
    <language>en</language>
    <item>
      <title>Padronização de código com (ESLint e EditorConfig)</title>
      <dc:creator>Vitor DevSP</dc:creator>
      <pubDate>Wed, 07 Jul 2021 22:07:18 +0000</pubDate>
      <link>https://dev.to/vitordevsp/padronizacao-de-codigo-com-eslint-e-editorconfig-33op</link>
      <guid>https://dev.to/vitordevsp/padronizacao-de-codigo-com-eslint-e-editorconfig-33op</guid>
      <description>&lt;p&gt;Utilizando ferramentas que irão aumentar sua produtividade e te proteger de você mesmo.&lt;/p&gt;

&lt;h2&gt;
  
  
  📌 Índice
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introdução&lt;/li&gt;
&lt;li&gt;EditorConfig&lt;/li&gt;
&lt;li&gt;ESLint&lt;/li&gt;
&lt;li&gt;Prettier&lt;/li&gt;
&lt;li&gt;Configurações

&lt;ul&gt;
&lt;li&gt;Configurando o EditorConfig&lt;/li&gt;
&lt;li&gt;Configurando o ESLint&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Finalizando&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✨ Introdução
&lt;/h2&gt;

&lt;p&gt;Por diversas vezes, passei pelo termo padronização de código e ele estava ligado a projetos de empresas com alguns desenvolvedores trabalhando. Com isso, em um primeiro momento, me perguntei: se trabalho sozinho em um projeto, pra que me preocupar em padronizar o código ou os commits (&lt;a href="https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n"&gt;artigo sobre padronização de commits&lt;/a&gt;)?!&lt;/p&gt;

&lt;p&gt;Inclusive, li um artigo muito bacana sobre isso no IMasters, voltado para a padronização de código em equipes, vou deixar ele &lt;a href="https://imasters.com.br/carreira-dev/padronizacao-no-codigo-e-na-equipe" rel="noopener noreferrer"&gt;AQUI&lt;/a&gt; para você conferir depois.&lt;/p&gt;

&lt;p&gt;Ao começar a estudar mais padronização de código, me deparei com diversas bibliotecas e configurações que poderia utilizar. Nesse momento, comecei a testar e entender o que é interessante usar em um projeto pessoal e o que pode ficar para outros projetos maiores.&lt;/p&gt;

&lt;p&gt;Hoje, estou configurando o ESLint em todos os meus projetos, pois ele acaba ajudando muito na produtividade e com isso consigo manter uma padronização de código entre os meus próprios projetos, o que ajuda muito quando preciso fazer alguma manutenção ou desenvolver novas funcionalidades.&lt;/p&gt;

&lt;p&gt;Nesse artigo, falarei sobre as ferramentas e configurações que utilizo atualmente em meus projetos. Deixarei também algumas dicas de configurações que faria para projetos com mais devs.&lt;/p&gt;

&lt;p&gt;Primeiramente, contextualizarei sobre as ferramentas que usaremos e depois mostrarei o passo a passo para se fazer as configurações. Dessa maneira, será prático revisitar esse artigo quando precisar criar um projeto e seguir o passo a passo da configuração.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ EditorConfig
&lt;/h2&gt;

&lt;p&gt;Existem várias configurações que os editores trazem por padrão, por exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se a indentação vai ser feita com espaços ou tabs&lt;/li&gt;
&lt;li&gt;O tamanho da indentação, se vai ser de 2 ou 4 espaços por exemplo&lt;/li&gt;
&lt;li&gt;O charset que está sendo utilizado&lt;/li&gt;
&lt;li&gt;Entre outras...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Em alguns casos, pode acontecer de você utilizar uma indentação de 2 espaços e uma nova página ser criada com 4 espaços ou vice-versa. Esse problema se torna um pouco maior caso haja mais devs no projeto, pois cada um pode preferir uma configuração ou estar utilizando outro editor com configurações diferentes, o que pode bagunçar um pouco o código.&lt;/p&gt;

&lt;p&gt;E é aí que entra o EditorConfig. Com ele podemos criar um arquivo de configuração que vai padronizar as configurações entre os editores. Com isso, no projeto em que ele estiver configurado as configurações padrões do editor vão ser substituídas, fazendo com que em qualquer situação tenhamos arquivos padronizados independentemente de gostos ou editores diferentes.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ ESLint
&lt;/h2&gt;

&lt;p&gt;O ESLint implementa o processo de Linting, que é responsável por aplicar regras a uma base de código e destacar padrões ou códigos problemáticos, sem a necessidade do código ser executado. No site dele encontramos a descrição "Encontre e corrija problemas em seu código JavaScript", mas ele pode ser usado também com Typescript.&lt;/p&gt;

&lt;p&gt;Para podermos usufruir de todo o poder do ESLint é importante seguirmos algum guia de estilo para o nosso código. Dentre os vários guias existentes, um dos mais famosos é o do &lt;a href="https://github.com/airbnb/javascript" rel="noopener noreferrer"&gt;Airbnb&lt;/a&gt; e um que gosto bastante de usar que é o &lt;a href="https://standardjs.com/rules-ptbr.html" rel="noopener noreferrer"&gt;Standard&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Um guia de estilo define regras e padrões que seu código deve seguir. Por exemplo, o guia do Airbnb usa aspas duplas e ponto e vírgula no final da linha. Particularmente, gosto de usar aspas simples e não finalizo a linha com o ponto e vírgula (o código fica muito feio com eles e é totalmente opcional), o que se adequa mais às regras do Standard.&lt;/p&gt;

&lt;p&gt;Não existe muito isso de qual é certo ou errado, o importante é você escolher um e seguir. Podemos modificar as regras que vêm por padrão em um guia ou até mesmo criar novas regras, vamos ver isso mais pra frente na seção de configurações.&lt;/p&gt;

&lt;p&gt;A coisa que é mais legal depois de configurar o ESLint, motivo por qual eu estou configurando ele em todos os projetos que trabalho, é o fato de conseguimos automatizar boa parte dos ajustes no código, o que agiliza muito na hora de codar.&lt;/p&gt;

&lt;p&gt;Uma coisa que me incomodava no auto-import do VS Code, é que às vezes ele faz o import com aspas duplas e ponto e vírgula, quando isso acontecia eu tinha que mudar manualmente as aspas e apagar o ponto e vírgula. Com o ESLint devidamente configurado, basta salvar o arquivo e o código vai ser ajustado automaticamente (isso ajuda muito).&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Prettier
&lt;/h2&gt;

&lt;p&gt;Uma outra ferramenta muito utilizada na padronização do código é o Prettier. Ele complementa o ESLint e faz ajustes que ele não faria sozinho. Por exemplo, se você tem uma linha com 100 caracteres ele vai quebrar e indentar a linha automaticamente, trabalhando mais na estrutura do código do que se preocupando com um guia de estilos que ele tenha que seguir.&lt;/p&gt;

&lt;p&gt;O Prettier é uma ferramenta fantástica, vou deixar o link da documentação dele &lt;a href="https://prettier.io/" rel="noopener noreferrer"&gt;AQUI&lt;/a&gt; para mais informações. Não vamos configurar ele nesse artigo, geralmente não configuro ele em meus projetos e vou explicar o porque.&lt;/p&gt;

&lt;p&gt;Automatizar a organização do código é muito legal e pode ser uma ótima ferramenta, mas isso tira um pouco da sua liberdade e engessa um pouco o código. O Prettier acaba fazendo várias formatações no código e às vezes eu não queria o código com o formato que ele sugeria. Gosto do processo de formatar o código e o Prettier acaba passando um pouco por cima disso. Em projetos que estou trabalhando sozinho, o ESLint é o suficiente para me ajudar, já o trabalho que o Prettier faz, gosto de fazer manualmente.&lt;/p&gt;

&lt;p&gt;Então em qual momento eu adicionaria o Prettier em um projeto?&lt;/p&gt;

&lt;p&gt;Em projetos Open Source que eu sei que as chances de receber Pull Requests são grandes e se estivesse em uma equipe com outros devs, caso percebesse que nem todos tem a mesma preocupação que eu de deixar o código bonito e organizado. Nesses casos, acho que faz total sentido o uso do Prettier, dessa forma garantimos que todos estão respeitando a organização do código.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Configurações
&lt;/h2&gt;

&lt;p&gt;Será necessário um projeto para fazer a configuração do EditorConfig e ESLint. Você pode seguir esse meu outro artigo para aprender a criar um projeto com Next e Typescript: &lt;a href="https://dev.to/vitordevsp/iniciando-um-projeto-com-next-js-e-typescript-58jo"&gt;Iniciando um Projeto com NextJS e Typescript&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ou pode criar um projeto simples abrindo uma pasta no seu editor e rodando o comando &lt;code&gt;yarn init -y&lt;/code&gt; ou &lt;code&gt;npm init -y&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Com o projeto iniciado, podemos começar as configurações.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✨ Configurando o EditorConfig
&lt;/h3&gt;

&lt;p&gt;Para configurar essa ferramenta, iremos precisar de uma extensão do VS Code chamada &lt;a href="https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig" rel="noopener noreferrer"&gt;EditorConfig for VS Code&lt;/a&gt;, ela também existe para outros editores.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuf33tjmeg08cfwxabdg4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuf33tjmeg08cfwxabdg4.png" alt="i1" width="800" height="140"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com a extensão instalada, podemos clicar com o botão direito sobre o explorador de arquivos do projeto e selecionar a opção &lt;code&gt;Generate .editorconfig&lt;/code&gt; e então um arquivo de configuração vai ser criado.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9enuqnbq36cmoh0me09j.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9enuqnbq36cmoh0me09j.gif" alt="editor_config" width="800" height="924"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O arquivo vai ser gerado com as seguintes configurações:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root = true

[*]
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = false
insert_final_newline = false

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse arquivo podemos ver algumas opções como o tipo de indentação, o tamanho da indentação, qual o charset que está sendo utilizado e algumas outras configurações. Pode ser que o seu &lt;code&gt;indent_size&lt;/code&gt; esteja com 4 e não com 2, fica a seu critério modificar essa opção, mas por convenção usamos 2.&lt;/p&gt;

&lt;p&gt;Vamos começar modificando as 2 últimas opções, &lt;code&gt;trim_trailing_whitespace&lt;/code&gt; e &lt;code&gt;insert_final_newline&lt;/code&gt;, de &lt;code&gt;false&lt;/code&gt; para &lt;code&gt;true&lt;/code&gt;. Trim_trailing_whitespace vai retirar os espaços desnecessários que às vezes deixamos no final da linha ou em uma linha em branco e insert&lt;br&gt;
_final_newline vai adicionar sempre uma linha em branco no final do arquivo, o que deixa o diff do git mais bonito e facilita a inserção de uma nova linha.&lt;/p&gt;

&lt;p&gt;Por fim, caso não exista no arquivo, adicionaremos mais uma configuração, a &lt;code&gt;end_of_line = lf&lt;/code&gt;, para garantir que as quebras de linha sejam padronizadas. No Windows o final das linhas são representadas por &lt;code&gt;\r\n&lt;/code&gt;  (&lt;a href="https://softwareengineering.stackexchange.com/questions/29075/difference-between-n-and-r-n" rel="noopener noreferrer"&gt;um link para quem quiser saber o porquê&lt;/a&gt;), já no Linux e Mac são apenas com &lt;code&gt;\n&lt;/code&gt; , então para evitar que isso gere algum tipo de problema adicionamos essa configuração.&lt;/p&gt;

&lt;p&gt;No final, o seu arquivo deve estar assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos também fazer a configuração do &lt;code&gt;trim_trailing_whitespace&lt;/code&gt; e &lt;code&gt;insert_final_newline&lt;/code&gt; direto no VS Code. O EditorConfig busca as configurações do editor para criar o arquivo, dessa maneira não vamos precisar fazer essas modificações quando criamos o próximo arquivo.&lt;/p&gt;

&lt;p&gt;Para acessar as configurações do VS Code, digite &lt;code&gt;CTRL+SHIFT+P&lt;/code&gt; e pesquise por &lt;code&gt;Open Settings (JSON)&lt;/code&gt;, clique na opção e irá abrir um arquivo JSON com as configurações do editor.&lt;/p&gt;

&lt;p&gt;Basta colocar as seguintes configurações no arquivo e salvar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"files.insertFinalNewline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"files.trimTrailingWhitespace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Opcional&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"editor.tabSize"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"editor.rulers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✨ Configurando o ESLint
&lt;/h3&gt;

&lt;p&gt;Antes de iniciar de fato a instalação e configuração do ESLint no nosso projeto, precisamos instalar a &lt;a href="https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint" rel="noopener noreferrer"&gt;extensão do ESLint no VS Code&lt;/a&gt;. Ela vai ajudar a fazer com que o código seja ajustado automaticamente e vai destacar os erros que encontrar no nosso código.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdih3ehuzbzbx1wsn4a6l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdih3ehuzbzbx1wsn4a6l.png" alt="Untitled" width="752" height="176"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora, precisamos inserir mais algumas propriedades no arquivo de configuração do editor.&lt;/p&gt;

&lt;p&gt;Para acessar as configurações do VS Code, digite &lt;code&gt;CTRL+SHIFT+P&lt;/code&gt; e pesquise por &lt;code&gt;Open Settings (JSON)&lt;/code&gt;, clique na opção e irá abrir um arquivo JSON com as configurações do editor.&lt;/p&gt;

&lt;p&gt;Adicione as seguintes linhas no arquivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"editor.formatOnSave"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"editor.codeActionsOnSave"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source.fixAll"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por padrão, o VS Code já tem uma funcionalidade que te ajuda a indentar o código, basta clicar com o botão direito em cima do código e ir na opção &lt;code&gt;Format Document&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Com essas configurações, sempre que salvar um arquivo ele será formatado automaticamente, mesmo não tendo o ESLint instalado. Isso vai te ajudar a manter o código sempre indentado e quando o ESLint estiver configurado, ele já irá formatar seguindo as regras dele.&lt;/p&gt;

&lt;p&gt;Agora, vamos para a instalação. As instruções utilizarão o &lt;code&gt;yarn&lt;/code&gt;, mas pode ser substituído pelo &lt;code&gt;npm&lt;/code&gt; se preferir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# O -D indica que vamos instalar a lib como uma dependência de desenvolvimento&lt;/span&gt;
yarn add eslint &lt;span class="nt"&gt;-D&lt;/span&gt;

&lt;span class="c"&gt;# Comando para inicializar o ESLint&lt;/span&gt;
yarn eslint &lt;span class="nt"&gt;--init&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O ESLint traz um guia que vai nos ajudar a fazer a instalação, só precisamos responder as perguntas.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;1 - How would you like do use Eslint?&lt;/strong&gt; (Qual a forma que queremos utilizar o &lt;strong&gt;Eslint&lt;/strong&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;To check syntax only&lt;/strong&gt; ⇒ Checar somente a sintaxe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;To check syntax and find problems&lt;/strong&gt; ⇒ Checar a sintaxe e encontrar problemas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;To check syntax, find problems and enforce code style&lt;/strong&gt; ⇒ Checar a sintaxe, encontrar problemas e forçar um padrão de código&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Escolheremos a última opção &lt;code&gt;To check syntax, find problems and enforce code style&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;2 - What type of modules does your project use?&lt;/strong&gt; (Qual tipo de módulo seu projeto usa?)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;JavaScript modules (import/export)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CommonsJS (require/exports)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Geralmente vamos utilizar a primeira opção &lt;code&gt;Javascript modules (import/export)&lt;/code&gt;, a menos que esteja trabalhando em um projeto de Back-end com uma versão do Node que não suporta os Modules, ou em alguma outra situação que demande o uso do CommonsJS.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;3 - Which framework does your project use?&lt;/strong&gt; (Qual framework seu projeto está utilizando?)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;React&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vue.JS&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;None of these&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se for um projeto Back-end escolha a opção &lt;code&gt;None of these&lt;/code&gt;. Se estiver criado o projeto seguindo meu artigo de Next.js, escolha React.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;4 - Does your project use TypeScript?&lt;/strong&gt; (Seu projeto está utilizando Typescript?)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se estiver seguindo meu artigo de Next.js, selecionar a opção &lt;code&gt;Yes&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;5 - Where does your code run?&lt;/strong&gt; (Onde seu código está rodando?)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Browser&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se for um projeto com o Next.js, utilize a tecla &lt;code&gt;Espaço&lt;/code&gt; e marque as duas opções.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;6 - How would you like to define a style for your project?&lt;/strong&gt; (Qual guia de estilo queremos utilizar?)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use a popular style guide ⇒&lt;/strong&gt; Padrões de projetos já criados anteriormente por outra empresa&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Answer questions about your style ⇒&lt;/strong&gt; Criar seu próprio padrão de projeto&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Selecione a primeira opção &lt;code&gt;Use a popular style guide&lt;/code&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;7 - Which style guide do you want to follow?&lt;/strong&gt; (Qual guia de estilo você deseja seguir?)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Airbnb: &lt;a href="https://github.com/airbnb/javascript" rel="noopener noreferrer"&gt;https://github.com/airbnb/javascript&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standard: &lt;a href="https://github.com/standard/standard" rel="noopener noreferrer"&gt;https://github.com/standard/standard&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google: &lt;a href="https://github.com/google/eslint-config-google" rel="noopener noreferrer"&gt;https://github.com/google/eslint-config-google&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Selecione a segunda opção &lt;code&gt;Standard&lt;/code&gt;. Em um outro momento você pode testar os outros guias.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;8 - What format do you want your config file to be in?&lt;/strong&gt; (Qual formato de configuração do Eslint que você deseja salvar?)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Javascript&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;YAML&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSON&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Selecione a opção &lt;code&gt;JSON&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;Nesse ponto, o ESLint irá te informar quais as dependências necessárias de acordo com as opções que foram selecionadas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9 - Would you like to install them now with npm?&lt;/strong&gt; (Você deseja instalar as dependências agora utilizando npm?)&lt;/p&gt;

&lt;p&gt;Caso esteja utilizando o &lt;strong&gt;Npm&lt;/strong&gt; a resposta é &lt;code&gt;Yes&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Com o &lt;strong&gt;Yarn&lt;/strong&gt; temos duas opções.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A mais simples (ou preguiçosa, geralmente eu uso essa) é responder sim. Desse modo, as dependências serão instaladas com o npm, o que vai fazer com que demore um pouco mais. Ao finalizar, o npm vai criar um arquivo &lt;code&gt;package-lock.json&lt;/code&gt; que precisamos apagar, e em seguida precisamos rodar o comando &lt;code&gt;yarn&lt;/code&gt; no terminal para mapear as dependências que foram instaladas com o npm no arquivo yarn.lock.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ou podemos instalar as dependências manualmente. O primeiro passo é selecionar as dependências que apareceram no seu terminal e copiar. No terminal não conseguimos copiar o texto com o atalho &lt;code&gt;CTRL+C&lt;/code&gt; precisamos usar &lt;code&gt;CTRL+SHIFT+C&lt;/code&gt; ou clicar com o botão direito do mouse e ir em copiar.&lt;/p&gt;

&lt;p&gt;Para instalar, começamos com o comando &lt;code&gt;yarn add -D&lt;/code&gt; e colamos as dependências que copiamos. O comando vai ter essa estrutura:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Não copie o comando abaixo, é só um exemplo.&lt;/span&gt;
&lt;span class="c"&gt;# As versões mudam constantemente, use as que esta no seu terminal.&lt;/span&gt;

yarn add &lt;span class="nt"&gt;-D&lt;/span&gt; eslint-plugin-react@latest @typescript-eslint/eslint-plugin@latest eslint-config-standard@latest eslint@^7.12.1 eslint-plugin-import@^2.22.1 eslint-plugin-node@^11.1.0 eslint-plugin-promise@^4.2.1 &lt;span class="o"&gt;||&lt;/span&gt; ^5.0.0 @typescript-eslint/parser@latest

&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Após finalizar a instalação, você vai notar um arquivo &lt;code&gt;.eslintrc.json&lt;/code&gt; na raiz do seu projeto. Dentro desse arquivo, no final dele, existe um campo de regras que provavelmente está vazio, vamos adicionar essas regras no arquivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"react/prop-types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"react/react-in-jsx-scope"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"space-before-function-paren"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"no-console"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"warn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"comma-dangle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"always-multiline"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"jsx-quotes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"prefer-double"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vou te explicar as regras, e se quiser mais informações é só pesquisar pela regra no Google.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;react/prop-types&lt;/code&gt; e &lt;code&gt;react/react-in-jsx-scope&lt;/code&gt; são validações do React que não são necessárias, então desativamos elas.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;space-before-function-paren&lt;/code&gt;, o Standart coloca um espaço entre o nome da função e os parênteses, dessa maneira: &lt;code&gt;function teste ()&lt;/code&gt; entretanto, não gosto desse padrão então desativo essa regra, assim os parênteses ficam colados no nome da função &lt;code&gt;function teste()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;no-console&lt;/code&gt;, já aconteceu algumas vezes de eu esquecer algum console.log no código sem querer, em algum teste que estava fazendo. Então passei a configurar essa regra, ela vai gerar um alerta em todos os consoles do código, e com isso eu sempre lembro de retirá-los antes de commitar.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;comma-dangle&lt;/code&gt;, eu sempre gosto de manter a última vírgula dentro de um objeto JS, pois deixa o diff do git mais bonito e é mais prático para adicionar uma nova propriedade se necessário, essa regra irá sinalizar quando estiver faltando a vírgula.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;jsx-quotes&lt;/code&gt;, no JS ou TS eu gosto de usar aspas simples, mas no HTML ou JSX eu mantenho as aspas duplas, pra mim faz sentido que seja assim já que o JSX se assemelha muito ao HTML, essa regra sinalizará isso.&lt;/p&gt;

&lt;p&gt;Cheguei a ler várias discussões sobre essa regra na internet, alguns consideram uma boa prática, outros não, então fica a seu critério. No final, quando salvar o arquivo, o ESLint vai organizar esses detalhes no código, então é tranquilo.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pra finalizar, é interessante criar um arquivo &lt;code&gt;.eslintignore&lt;/code&gt; e de preferência copiar o conteúdo do arquivo &lt;code&gt;.gitignore&lt;/code&gt; do seu projeto e colar nele.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Finalizando
&lt;/h2&gt;

&lt;p&gt;Em um primeiro momento pode parecer muita coisa tudo que vimos, mas não é, só parece porque é algo novo. Quando for fazer a configuração pela segunda vez já vai estar bem mais simples.&lt;/p&gt;

&lt;p&gt;Não deixe de fazer essas configurações em um projeto para você testar, garanto que vai te ajudar. Não só vai aumentar a sua produtividade por estar automatizando uma tarefa que está fazendo manualmente (ou pelo menos deveria estar, né 👀), como também vai elevar o nível do seu código, deixando-o mais profissional e mostrando que você se importa com a organização e indentação dele.&lt;/p&gt;

&lt;p&gt;Espero que esse artigo tenha somado para você de alguma forma. Você pode entrar em contato comigo para me passar um feedback ou trocar uma ideia pelo &lt;a href="https://www.linkedin.com/in/vitordevsp/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt; ou &lt;a href="https://www.instagram.com/vitordevsp/" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt;. Deixarei também o meu &lt;a href="https://github.com/vitordevsp" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; por aqui e meu site &lt;a href="http://vitordevsp.com.br/" rel="noopener noreferrer"&gt;vitordevsp.com.br&lt;/a&gt;, no qual você pode encontrar mais conteúdos criados por mim.&lt;/p&gt;

</description>
      <category>eslint</category>
      <category>editorconfig</category>
      <category>prettier</category>
      <category>styleguide</category>
    </item>
    <item>
      <title>Padronização de commit com (Commitlint, Husky e Commitizen)</title>
      <dc:creator>Vitor DevSP</dc:creator>
      <pubDate>Tue, 15 Jun 2021 15:51:19 +0000</pubDate>
      <link>https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n</link>
      <guid>https://dev.to/vitordevsp/padronizacao-de-commit-com-commitlint-husky-e-commitizen-3g1n</guid>
      <description>&lt;p&gt;Introduzindo bibliotecas que tornarão seus históricos no Git mais padronizados e manuteníveis.&lt;/p&gt;

&lt;h2&gt;
  
  
  📌 Índice
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introdução&lt;/li&gt;
&lt;li&gt;Commits atômicos&lt;/li&gt;
&lt;li&gt;Padronização dos commits

&lt;ul&gt;
&lt;li&gt;Conventional Commits na prática&lt;/li&gt;
&lt;li&gt;Semantic Versioning (Versionamento Semântico)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Commitlint&lt;/li&gt;

&lt;li&gt;Husky&lt;/li&gt;

&lt;li&gt;Commitizen&lt;/li&gt;

&lt;li&gt;Instalando e configurando as bibliotecas

&lt;ul&gt;
&lt;li&gt;Instalando o commitlint&lt;/li&gt;
&lt;li&gt;Instalando o husky&lt;/li&gt;
&lt;li&gt;Instalando o commitizen&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Finalizando&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✨ Introdução
&lt;/h2&gt;

&lt;p&gt;Sem dúvidas uma das ferramentas mais importantes para uma pessoa desenvolvedora é o Git. Com essa ferramenta conseguimos fazer o versionamento do nosso código, mantendo um histórico de todas as alterações.&lt;/p&gt;

&lt;p&gt;O Git cria uma linha do tempo das modificações feitas em nosso projeto e cada ponto nessa linha do tempo é definido por um commit, que é o ato de empacotar aquelas alterações que foram feitas.&lt;/p&gt;

&lt;p&gt;Ao criar um commit, sempre precisamos inserir uma mensagem para o mesmo, que de preferência seja curta, objetiva e descritiva. Se você está aprendendo Git, sua maior preocupação não vai ser criar a melhor mensagem para o seu commit, e nem deveria ser.&lt;/p&gt;

&lt;p&gt;Em um primeiro momento, é interessante que você domine as funções básicas do Git, e depois disso dê o próximo passo buscando entender práticas como commits atômicos e padronização das mensagens de commits.&lt;/p&gt;

&lt;p&gt;Iniciarei contextualizando sobre as práticas citadas e as bibliotecas que uso para fazer a padronização dos commits e na sequência irei configurar a instalação e configuração das bibliotecas. Dessa maneira, fica mais prático de revisitar o artigo e seguir o passo a passo para configurar futuros projetos.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Commits atômicos
&lt;/h2&gt;

&lt;p&gt;A prática de criar commits atômicos consiste em criar um commit para cada modificação no projeto, por exemplo, vamos imaginar que estamos trabalhando em um projeto e fizemos duas ações: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;criamos um novo componente&lt;/li&gt;
&lt;li&gt;fizemos alterações em um já existente&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Em vez de criarmos um único commit para guardar as alterações que fizemos, faremos dois commits, seguindo um padrão de commits atômicos. O primeiro commit será com os arquivos envolvidos na criação do novo componente, e o segundo com as alterações feitas em um componente já existente.&lt;/p&gt;

&lt;p&gt;Dessa maneira conseguimos escrever uma mensagem mais descritiva para o commit, as ações na linha do tempo ficam mais descritivas e é mais prático de navegar pelos commits visualizando as modificações. Na ocorrência de um bug no projeto, é bem mais fácil de encontrar em qual commit ele foi inserido e reverter o que foi feito.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Padronização dos commits
&lt;/h2&gt;

&lt;p&gt;Outra prática muito importante e que está ligada a anterior é a padronização das mensagens dos commits, dessa maneira seguimos uma estrutura na hora de escrevermos as mensagens, o que deixa os commits estruturados e padronizados.&lt;/p&gt;

&lt;p&gt;Quando iniciei os estudos com o Git, imaginei se existiria uma regra ou padrão a se seguir ao criar os commits. Esse interesse se despertou a um tempo atrás, quando vi um vídeo no canal do Dev Soutinho falando sobre isso, vou deixar o link para você conferir depois:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=1eTofdmfq1g" rel="noopener noreferrer"&gt;Como padronizar commits? #DevTips Conventional Commits + Semantic Release para releases e versioning&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nesse vídeo, o Mario fala sobre o &lt;a href="https://www.conventionalcommits.org/pt-br/v1.0.0/" rel="noopener noreferrer"&gt;Conventional Commits&lt;/a&gt;, vou colar aqui um trecho de descrição do próprio site: &lt;em&gt;"Uma especificação para dar um significado legível às mensagens de commit para humanos e máquinas."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Basicamente, o Conventional Commits é uma convenção que define um conjunto de regras para criar um histórico de commit fácil de ler e padronizado. Essas regras são baseadas na Convenção que foi criada pelo time de desenvolvimento do Angular e passou a ser amplamente utilizado pela comunidade.&lt;/p&gt;

&lt;p&gt;OBS: Não existe só a convenção que o time do Angular criou, mas ela é uma das mais utilizadas. Vou deixar o &lt;a href="https://github.com/angular/angular/blob/22b96b9/CONTRIBUTING.md" rel="noopener noreferrer"&gt;link aqui&lt;/a&gt; caso você tenha interesse em ler.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conventional Commits na prática
&lt;/h3&gt;

&lt;p&gt;O commit tem que seguir a seguinte estrutura:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&amp;lt;tipo&amp;gt;[escopo opcional]: &amp;lt;descrição&amp;gt;

&lt;span class="o"&gt;[&lt;/span&gt;corpo opcional]

&lt;span class="o"&gt;[&lt;/span&gt;rodapé&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt; opcional&lt;span class="o"&gt;(&lt;/span&gt;is&lt;span class="o"&gt;)]&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;A mensagem deve ser escrita com letras minúsculas, com um espaço entre o dois pontos e a descrição e sem ponto final.&lt;/p&gt;

&lt;p&gt;Geralmente eu escrevo apenas a primeira linha, vou colocar a lista com os tipos que podemos utilizar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;chore:&lt;/strong&gt; Atualização de tarefas que não ocasionam alteração no código de produção, mas mudanças de ferramentas, mudanças de configuração e bibliotecas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;feat:&lt;/strong&gt; São adições de novas funcionalidades ou de quaisquer outras novas implantações ao código.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;fix:&lt;/strong&gt; Essencialmente definem o tratamento de correções de bugs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;refactor:&lt;/strong&gt; Utilizado em quaisquer mudanças que sejam executados no código, porém não alterem a funcionalidade final da tarefa impactada.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;docs:&lt;/strong&gt; Inclusão ou alteração somente de arquivos de documentação.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;perf:&lt;/strong&gt; Uma alteração de código que melhora o desempenho.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;style:&lt;/strong&gt; Alterações referentes a formatações na apresentação do código que não afetam o significado do código, como por exemplo: espaço em branco, formatação, ponto e vírgula ausente etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;test:&lt;/strong&gt; Adicionando testes ausentes ou corrigindo testes existentes nos processos de testes automatizados (TDD).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;build:&lt;/strong&gt; Alterações que afetam o sistema de construção ou dependências externas (escopos de exemplo: gulp, broccoli, npm).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ci:&lt;/strong&gt; Mudanças em nossos arquivos e scripts de configuração de CI (exemplo de escopos: Travis, Circle, BrowserStack, SauceLabs).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;env:&lt;/strong&gt; Utilizado na descrição de modificações ou adições em arquivos de configuração em processos e métodos de integração contínua (CI), como parâmetros em arquivos de configuração de containers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Exemplos de Commits:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;chore: add commitlint e husky&lt;/li&gt;
&lt;li&gt;chore(eslint): obrigar o uso de aspas duplas no jsx&lt;/li&gt;
&lt;li&gt;refactor: refatorando a tipagem&lt;/li&gt;
&lt;li&gt;feat: add axios / buscando e tratando os dados&lt;/li&gt;
&lt;li&gt;feat(page/home): criando o roteamentento no next&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dessa maneira fica muito mais fácil a leitura do histórico de commits e o entendimento do que foi feito no código. Se você trabalha sozinho no projeto, experimente ficar 6 meses sem mexer no projeto. Com os commits padronizados, ao voltar a mexer nele, fica muito mais fácil lembrar quais foram suas últimas alterações.&lt;/p&gt;

&lt;p&gt;OBS: eu já fiquei perdido no meu próprio código em projetos mais antigos e isso acontece porque ao longo do tempo evoluímos nosso código e adotamos novos hábitos de escrita, ao ponto de não reconhecermos nosso próprio código de meses atrás.&lt;/p&gt;

&lt;p&gt;Acabei resumindo o Conventional Commits focando na parte que é mais utilizada, mas separei o link da convenção e de um artigo mais completo sobre o assunto, não deixe de ler:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.conventionalcommits.org/pt-br/v1.0.0/" rel="noopener noreferrer"&gt;Especificação do Conventional Commits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.geekhunter.com.br/o-que-e-commit-e-como-usar-commits-semanticos/" rel="noopener noreferrer"&gt;O que é Commit e como usar Commits Semânticos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✨ Semantic Versioning (Versionamento Semântico)
&lt;/h2&gt;

&lt;p&gt;Tanto no vídeo do Mario do canal Dev Soutinho que eu deixei ali em cima, quanto na especificação do Conventional Commits, você vai se deparar com o termo Semantic Versioning.&lt;/p&gt;

&lt;p&gt;Ele padroniza o versionamento das bibliotecas que usamos no dia a dia. Estudando-o, você entenderá o porquê dos números que seguem o nome do pacote que você instalou no seu projeto, localizado no arquivo package.json, por exemplo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@chakra-ui/react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.6.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@emotion/react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@emotion/styled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"framer-motion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"next"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"10.2.3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"17.0.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"react-dom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"17.0.2"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;É muito importante pelo menos entender como funciona o Semantic Versioning, vai te ajudar em diversas situações. Além disso, te ajudará a ter uma compreensão maior na hora de entender o lançamento de uma biblioteca, a evitar uma versão que está com problemas ou entender quando o problema de uma biblioteca foi resolvido. É um conhecimento que só tem a acrescentar na sua vida como dev.  &lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Commitlint
&lt;/h2&gt;

&lt;p&gt;Entendemos o Conventional Commits, mas nada garante que vamos respeitar as regras impostas, pois, mesmo trabalhando sozinho em um projeto, pode ser que esqueçamos de seguir o padrão que foi definido.&lt;/p&gt;

&lt;p&gt;É ai que entra o &lt;a href="https://commitlint.js.org/#/" rel="noopener noreferrer"&gt;commitlint&lt;/a&gt;, com ele conseguimos verificar se a mensagem de commit que escrevemos realmente está dentro dos padrões pré definidos. Vamos usar os padrões do Angular, mas ele pode ser alterado e podemos até mesmo criar o nosso próprio padrão.&lt;/p&gt;

&lt;p&gt;Antes de fazermos um commit, vamos rodar a biblioteca para fazer essa verificação. Se a mensagem do commit não estiver seguindo o padrão, será gerado um erro no terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Husky
&lt;/h2&gt;

&lt;p&gt;O Husky vai nos ajudar a criarmos ganchos para o Git de uma maneira simples. Os ganchos são ações que vão ser disparadas em determinados momentos. Nesse caso, vamos criar um gancho para ser disparado antes de um commit ser inicializado.&lt;/p&gt;

&lt;p&gt;Dessa maneira, sempre que fizermos um commit, vamos configurar o Husky para executar o Commitlint e verificar se a mensagem do commit está seguindo os padrões recomendados.&lt;/p&gt;

&lt;p&gt;Com isso, automatizamos o processo de verificação da mensagem e não precisamos nos preocupar em rodá-lo manualmente. Mesmo com o Commitlint, pode ser que você esqueça de fazer a verificação e não queremos que isso aconteça, mas dessa maneira nenhum commit com a mensagem errada vai passar.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Commitizen
&lt;/h2&gt;

&lt;p&gt;Chegamos na última biblioteca que iremos utilizar.&lt;/p&gt;

&lt;p&gt;O Commitizen é uma biblioteca que vai nos ajudar a criar os commits seguindo o padrão do Conventional Commit. Ela gera uma interface no terminal e assim vamos conseguir acessar todos os tipos de commits e suas descrições:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftv9m1r2gdhvi8836ewcr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftv9m1r2gdhvi8836ewcr.png" alt="add-commit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao adotar um novo padrão como estamos fazendo, precisamos de um tempo até decorarmos os tipos e não precisar ficar consultando a documentação para conferir qual tipo usar. É aí que essa biblioteca vai nos ajudar. &lt;/p&gt;

&lt;p&gt;Iremos criar um script que podemos rodar sempre que quisermos fazer um commit guiado. Dessa maneira, só precisamos seguir o passo a passo que a biblioteca implementa e geraremos um commit dentro do padrão.&lt;/p&gt;

&lt;p&gt;Nem sempre vamos precisar usá-la, mas gosto de deixar instalada, pois se precisar é só executar o script.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Instalando e configurando as bibliotecas
&lt;/h2&gt;

&lt;p&gt;Será necessário um projeto para fazer a instalação das bibliotecas. Você pode seguir esse meu outro artigo para aprender a criar um projeto com Next e Typescript:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/vitordevsp/iniciando-um-projeto-com-next-js-e-typescript-58jo"&gt;Iniciando um Projeto com NextJS e Typescript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ou é só criar um projeto simples com o yarn ou npm, abrindo uma pasta no seu editor e rodando esse comando no terminal:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

yarn init &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="c"&gt;# ou &lt;/span&gt;

npm init &lt;span class="nt"&gt;-y&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Com o projeto iniciado, podemos começar a instalar as bibliotecas, todas vão ser instaladas como dependências de desenvolvimento, não vamos usá-las no ambiente de produção.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✨ Instalando o commitlint
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://commitlint.js.org/#/guides-local-setup" rel="noopener noreferrer"&gt;Link para o site da biblioteca&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# Instalando e configurando o commitlint&lt;/span&gt;
yarn add @commitlint/config-conventional @commitlint/cli &lt;span class="nt"&gt;-D&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"module.exports = { extends: ['@commitlint/config-conventional'] };"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; commitlint.config.js


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Caso você esteja no Windows e a segunda linha der erro, é só criar um arquivo com o nome:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;commitlint.config.js&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E adicionar esse conteúdo dentro:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;module.exports = {extends: ['@commitlint/config-conventional']}&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Podemos testar pra ver se deu tudo certo, o primeiro teste precisa gerar um erro porque não está seguindo o padrão do Conventional Commits. O segundo teste deve passar.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# Para testar a biblioteca&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"teste"&lt;/span&gt; | yarn commitlint

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"feat: teste"&lt;/span&gt; | yarn commitlint


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  ✨ Instalando o husky
&lt;/h3&gt;

&lt;p&gt;No site do commitlint vai ter as instruções para instalar o husky também, com yarn ou npm.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# instalando Husky v6&lt;/span&gt;
yarn add husky &lt;span class="nt"&gt;-D&lt;/span&gt;

&lt;span class="c"&gt;# ativando os hooks&lt;/span&gt;
yarn husky &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Para ativar os hooks automaticamente após a instalação&lt;/span&gt;
&lt;span class="s2"&gt;"scripts"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"prepare"&lt;/span&gt;: &lt;span class="s2"&gt;"husky install"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;# Add hook que vai disparar o commitlint&lt;/span&gt;
yarn husky add .husky/commit-msg &lt;span class="s1"&gt;'yarn commitlint --edit $1'&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;É muito importante criar o script de prepare no arquivo package.json, caso contrário, quando você ou outra pessoa baixar o projeto do GitHub, o husky não vai funcionar, e então teria que rodar o comando  &lt;code&gt;yarn husky install&lt;/code&gt; manualmente. Com o script, deixamos essa instalação automatizada.&lt;/p&gt;

&lt;p&gt;Agora podemos fazer um commit para verificar se está tudo certo.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# Primeiro precisamos adicionar os arquivos para serem commitados&lt;/span&gt;
git add &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Vamos fazer o commit falhar para ver se tudo está funcionando&lt;/span&gt;
&lt;span class="c"&gt;# Se o commit passar, algum passo até aqui deu errado&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"qualquer coisa"&lt;/span&gt;

&lt;span class="c"&gt;# Agora vamos fazer o commit corretamente, nesse caso eu vou usar o tipo chore&lt;/span&gt;
&lt;span class="c"&gt;# Por se tratar de uma configuração no ambiente de desenvolvimento&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"chore: add commitlint e husky"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  ✨ Instalando o commitizen
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://commitizen.github.io/cz-cli/" rel="noopener noreferrer"&gt;Link para o site da biblioteca&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# Instalando o commitizen&lt;/span&gt;
yarn add commitizen &lt;span class="nt"&gt;-D&lt;/span&gt;

&lt;span class="c"&gt;# Criando a configuração&lt;/span&gt;
yarn commitizen init cz-conventional-changelog &lt;span class="nt"&gt;--yarn&lt;/span&gt; &lt;span class="nt"&gt;--dev&lt;/span&gt; &lt;span class="nt"&gt;--exact&lt;/span&gt;

&lt;span class="c"&gt;# Add um script no package.json para disparar o commitizen&lt;/span&gt;
&lt;span class="s2"&gt;"scripts"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"commit"&lt;/span&gt;: &lt;span class="s2"&gt;"git-cz"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Com a biblioteca instalada e configurada, vamos fazer um commit para entender o passo a passo que ela traz na prática.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# Primeiro, precisamos adicionar os arquivos para serem commitados&lt;/span&gt;
git add &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Agora vamos executar o script para iniciar a biblioteca&lt;/span&gt;
yarn commit


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ao iniciar a biblioteca ela vai mostrar um passo a passo:&lt;/p&gt;

&lt;p&gt;1) Select the type of change that you're committing: (Use arrow keys)&lt;/p&gt;

&lt;p&gt;Selecione o tipo de mudança que você está realizando: (Use as teclas de seta)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;É só usar as setas e enter para selecionar um tipo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2) What is the scope of this change (e.g. component or file name): (press enter to skip)&lt;/p&gt;

&lt;p&gt;Qual é o escopo desta mudança (por exemplo, componente ou nome do arquivo): (pressione Enter para pular)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Exemplo:&lt;/strong&gt; chore(eslint): obrigar o uso de aspas duplas no jsx.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Em vez de colocar na mensagem do commit onde estava sendo feita a modificação, eu passei essa informação no escopo e a mensagem ficou mais sucinta.&lt;/p&gt;

&lt;p&gt;3) Write a short, imperative tense description of the change (max 82 chars):&lt;/p&gt;

&lt;p&gt;Escreva uma descrição breve e imperativa da mudança (máx. 82 caracteres):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utilizando o exemplo a cima, essa é a mensagem que sucede o dois pontos: obrigar o uso de aspas duplas no jsx&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;4) Provide a longer description of the change: (press enter to skip)&lt;/p&gt;

&lt;p&gt;Forneça uma descrição mais longa da mudança: (pressione Enter para pular)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Essa opção é opcional e geralmente eu não preencho, mas você pode inserir um contexto mais amplo que descreve a modificação que foi feita.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;5) Are there any breaking changes? (y/N)&lt;/p&gt;

&lt;p&gt;Existem alterações importantes? (y/N)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A tradução não descreve bem essa opção, ela está ligada a quebra de compatibilidade estipulada pelo Semantic Versioning, se tiver conhecimento sobre isso, vai saber a resposta, senão quer dizer que não está fazendo versionamento e pode pular sem medo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OBS: Sempre que estiver trabalhando no terminal e ele mostrar duas opções, sendo uma delas maiúscula, se pressionar enter ele seleciona a maiúscula que no caso é o N, ou você pode digitar N e pressionar enter.&lt;/p&gt;

&lt;p&gt;6) Does this change affect any open issues? (y/N)&lt;/p&gt;

&lt;p&gt;Essa mudança afeta algum problema em aberto? (y/N)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Essa opção está ligada as Issues do GitHub, é uma opção mais avançada e não vou abordá-la nesse artigo, é só pressionar enter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E pronto, o commit vai ser realizado.&lt;/p&gt;

&lt;p&gt;Podemos digitar o comando &lt;code&gt;git log&lt;/code&gt; no terminal para ver a lista com os últimos commits, e em primeiro lugar vai estar o commit gerado pelo commitizen.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨Finalizando
&lt;/h2&gt;

&lt;p&gt;Uma nova prática não precisa e nem deve ser adotada de uma vez em todos os seus projetos. Faça um teste de maneira gradual e analise se faz sentido para o seu contexto. Sempre começo testando algo novo em projetos de estudos.&lt;/p&gt;

&lt;p&gt;Uma outra prática interessante é escrever as mensagens dos commits em inglês. Atualmente tenho uma certa dificuldade com o inglês, então prefiro fazer em português nos meus projetos pessoais, para ficar mais claro quando for ler o histórico.&lt;/p&gt;

&lt;p&gt;Espero que esse artigo tenha somado para você de alguma forma. Você pode entrar em contato comigo para me passar um feedback ou trocar uma ideia pelo &lt;a href="https://www.linkedin.com/in/vitordevsp/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt; ou &lt;a href="https://www.instagram.com/vitordevsp/" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt;. Deixarei também o meu &lt;a href="https://github.com/vitordevsp" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; por aqui.&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>commit</category>
    </item>
    <item>
      <title>Iniciando um Projeto com Next.js e Typescript</title>
      <dc:creator>Vitor DevSP</dc:creator>
      <pubDate>Tue, 08 Jun 2021 18:16:08 +0000</pubDate>
      <link>https://dev.to/vitordevsp/iniciando-um-projeto-com-next-js-e-typescript-58jo</link>
      <guid>https://dev.to/vitordevsp/iniciando-um-projeto-com-next-js-e-typescript-58jo</guid>
      <description>&lt;p&gt;Nesse artigo, falarei um pouco sobre o Next.js e o Typescript, a dupla que estou utilizando em meus novos projetos.&lt;/p&gt;




&lt;h2&gt;
  
  
  Indice
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introdução&lt;/li&gt;
&lt;li&gt;Next.js

&lt;ul&gt;
&lt;li&gt;Aprenda mais sobre o Next&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Typescript

&lt;ul&gt;
&lt;li&gt;Aprenda mais sobre o Typescript&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Criando e configurando a aplicação

&lt;ul&gt;
&lt;li&gt;Criando um projeto Next.js&lt;/li&gt;
&lt;li&gt;Organizando e limpando a estrutura&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Finalizando&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Nesse artigo, falarei um pouco sobre o Next.js e o Typescript, a dupla que estou utilizando em meus novos projetos.&lt;/p&gt;

&lt;p&gt;Começarei contextualizando sobre as tecnologias citadas e recomentando conteúdos nos quais você poderá se aprofundar. Recomendo que posteriormente você revise o artigo, acessando os materiais recomendados.&lt;/p&gt;

&lt;p&gt;Por fim, vamos criar e configurar um projeto com o Next.js e o Typescript.&lt;/p&gt;




&lt;h2&gt;
  
  
  Next.js
&lt;/h2&gt;

&lt;p&gt;O React é uma biblioteca Javascript para construção de interfaces, e não apenas para ambientes web. É possível utilizar o React em aplicações mobile com o React Native, desktop com ElectronJS, e até mesmo em aplicações de Realidade Virtual com o React VR.&lt;/p&gt;

&lt;p&gt;O Next é considerado um framework pois adiciona várias funcionalidades em cima do React e algumas delas são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSR (Server Side Rendering):&lt;/strong&gt; Torna a aplicação mais performática para o usuário final e resolve o que pode ser um problema em algumas aplicações, que é a indexação do conteúdo da aplicação por motores de busca, como o Google.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SSG (Static Site Generation):&lt;/strong&gt; Uma das features mais legais do Next, ele consegue gerar paginas dinâmicas de maneira estática.&lt;/p&gt;

&lt;p&gt;Quando estamos usando SSR, sempre que acessamos uma página, ela é gerada novamente pelo servidor, então, mesmo que você tenha uma página que mude uma vez por dia, ainda que seja acessada 1.000 vezes, será renderizada 1.000 vezes pelo servidor. Ou, ainda, se ela acessa o banco de dados, irá acessar 1.000 vezes também.&lt;/p&gt;

&lt;p&gt;Com o SSG, podemos configurar o Next para gerar uma página estática e revalidá-la em um intervalo de tempo. Dessa forma, configuramos a nossa página, que muda uma vez por dia, para ser recriada em um intervalo de 24h. Assim, mesmo que ela tenha 10.000 acessos, só será criada uma vez e só fará uma chamada ao banco de dados. Isso é uma funcionalidade incrível.&lt;/p&gt;

&lt;p&gt;Para ter mais informações sobre essa feature, deixarei um link de um vídeo da Rockeseat, em que o Diego explora mais essa funcionalidade.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=u1kCtkVR7cE"&gt;Essa feature fez o Next.js ser o framework mais popular | Code/Drops #59&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SPA (Single Page Application):&lt;/strong&gt; Mesmo com essas features de Backend que vimos até agora, nós não perdemos uma das funcionalidades mais importantes que surgiram com essa onda mais atual de se criar aplicações web.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;File System Routing:&lt;/strong&gt; Em uma aplicação tradicional com React precisamos de uma biblioteca como a react-router-dom para fazer o roteamento das páginas. Por outro lado, o Next, por padrão, cria um roteamento baseado em sistema de arquivos, em que cada arquivo que está dentro da pasta pages automaticamente vira uma rota da aplicação.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Otimização de imagens:&lt;/strong&gt; O Next tem um componente interno que podemos utilizar para importar imagens de maneira otimizada, com isso podemos obter as imagens com diversos tamanhos e qualidades, prevenindo a importação de imagens pesadas desnecessariamente.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essas são só algumas das funcionalidades que o Next traz e há um mundo delas para explorar, como &lt;a href="https://nextjs.org/docs/advanced-features/i18n-routing"&gt;Suporte à Internacionalização&lt;/a&gt;, Configurações otimizadas, &lt;a href="https://nextjs.org/docs/basic-features/built-in-css-support"&gt;Suporte embutido para CSS e SASS&lt;/a&gt;, Envio de arquivo estático, entre outras.&lt;/p&gt;

&lt;h3&gt;
  
  
  Aprenda mais sobre o Next
&lt;/h3&gt;

&lt;p&gt;No site da Vercel, empresa por trás do Next, temos disponível uma &lt;a href="https://nextjs.org/docs/getting-started"&gt;documentação incrível&lt;/a&gt; e também um &lt;a href="https://nextjs.org/learn/basics/create-nextjs-app?utm_source=next-site&amp;amp;utm_medium=nav-cta&amp;amp;utm_campaign=next-website"&gt;guia com um passo a passo&lt;/a&gt; para aprender sobre o framework.&lt;/p&gt;

&lt;p&gt;No canal Código Fonte TV, há um vídeo falando sobre o Next.js:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=q_ZoX98uopM"&gt;Next.js (Renderização React no Lado Servidor) // Dicionário do Programador&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O conteúdo mais legal que eu já vi na internet sobre o Next é uma playlist que o Filipe Deschamps criou no canal dele, você &lt;strong&gt;precisa&lt;/strong&gt; assistir depois que acabar de ler esse post:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/playlist?list=PLMdYygf53DP7FJzPslLnmqp0QylyFfA8a"&gt;Como Criar Um Site (Grátis e Moderno)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E pra quem gosta de ler, tem dois artigos bem interessantes que eu achei enquanto estudava mais para escrever o meu artigo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.geekhunter.com.br/o-que-e-next-js/"&gt;O que é o Next.js?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.alura.com.br/artigos/next-js-vantagens"&gt;NextJS: por que usar?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Também vou deixar aqui alguns canais que tem conteúdos sobre Next.js, você nunca pode ter uma única fonte de estudos, ainda mais se tratando de programação:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/rocketseat"&gt;Rockeseat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/channel/UCzR2u5RWXWjUh7CwLSvbitA"&gt;Dev Soutinho&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/channel/UCVE9-HO_GzLtDK4IGKVSYXA"&gt;Lucas Nhimi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por fim, não deixe de se inscrever no meu canal. Em breve irei trazer muito conteúdo sobre Next.js e outros tópicos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/channel/UCFIHeoKduKPsE2m1oSiK9Mg"&gt;Vitor DevSP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Typescript
&lt;/h2&gt;

&lt;p&gt;O Typescript é um conjunto de funcionalidades adicionadas ao Javascript e a principal é trazer a tipagem estática para a linguagem.&lt;/p&gt;

&lt;p&gt;O JS é uma linguagem de tipagem fraca, e isso é muito legal, pois te dá muita liberdade para sair programando e traz facilidade para quem está começando a programar. Porém o JS acaba dando liberdade até demais e isso possibilita a criação de erros enquanto programamos, justamente pela tipagem fraca.&lt;/p&gt;

&lt;p&gt;Obs: é importante que você saiba JS antes de aprender TS, pois este não é um substituto e sim um complemento.&lt;/p&gt;

&lt;p&gt;Quando vi o Typescript pela primeira vez, não gostei nem um pouco dele, eu pensei: como assim ele vai estragar uma das coisas mais legais do JS que é a tipagem fraca. Mas... não é bem por aí.&lt;/p&gt;

&lt;p&gt;Quando comprei o Bootcamp da Rocketseat, fui obrigado a estudar Typescript, pois ele estava presente em basicamente todos os módulos. Depois de alguns dias utilizando-o nos estudos, voltei a usar JS nos projetos que estava trabalhando, e então tive um choque de realidade. Foi aí que comecei a perceber na prática como o TS facilitava muito mais a minha vida e, apesar da pequena curva de aprendizado no início, comecei a sentir falta das tipagens sempre que voltava pro JS, principalmente a funcionalidade do autocomplete.&lt;/p&gt;

&lt;p&gt;E é aí que entra os pontos mais legais do Typescript:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Autocomplete:&lt;/strong&gt; como estamos tipando as propriedades que nossos componentes recebem ou as nossas chamadas a APIs, ao acessar um objeto podemos simplesmente usar o CTRL+ESPAÇO para que o autocomplete do VS Code nos ajude a achar a propriedade que queremos. É por meio dele que podemos fazer uma checagem para garantir que não acessaremos um recurso que não existe, e isso é excelente.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tipagem nas Bibliotecas:&lt;/strong&gt; em diversos momentos, importamos bibliotecas e nem sempre o autocomplete funciona bem. Usando o Next, por exemplo, em alguns momentos você vai usar uma função padrão que tem métodos ou propriedades pré-definidas.&lt;/p&gt;

&lt;p&gt;Nesses casos, podemos importar um conjunto de tipagens de dentro da biblioteca, e ela já vai fornecer todos os métodos e propriedades que aquela função ou objeto tem, o que vai facilitar muito a nossa vida.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Evitar erros de digitação:&lt;/strong&gt; erro de digitação é algo que é extremamente comum entre os programadores iniciantes, acontecendo até mesmo com programadores mais experientes. O TS vai checar as suas variáveis durante o desenvolvimento, vai identificar todos os possíveis erros e te sinalizar sempre que possível.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Componentes mais consistentes:&lt;/strong&gt; isso é uma das coisas mais legais. Como podemos tipar as propriedades que um componente vai receber, podemos dizer se elas serão obrigatórias ou não, garantindo que você nunca vai passar uma propriedade errada para dentro de um componente, nem mesmo vai conseguir renderizá-lo com uma propriedade obrigatória faltando.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Resumindo, minha experiência com o TS tem sido incrível. Recentemente tive que fazer modificações em um projeto em javascript de uma cliente e, como fazia um tempo que não tinha contato com ele, tive que primeiro me encontrar no projeto. Com o TS seria bem mais simples de identificar as informações, comportamentos e fazer as alterações necessárias.&lt;/p&gt;

&lt;h3&gt;
  
  
  Aprenda mais sobre o Typescript
&lt;/h3&gt;

&lt;p&gt;Diferente do que eu imaginava, você não precisa tipar tudo sempre com o TS, ele tenta tipar boa parte das variáveis e retornos de funções. Você consegue deixar muita coisa sem tipar, embora isso não seja o ideal, mas isso ajuda muito nos primeiros projetos, pois você pode ir aprendendo a tipar as coisas aos poucos, que é justamente um dos temas abordados nesse podcast que vou deixar a seguir:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ShnSc0DD1z4"&gt;TypeScript vale a pena? JavaScript perde sentido? | Podcast FalaDev #22&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Separei um post para você ler sobre typescript. Não deixe de pesquisar por outros se tiver interesse:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.rocketseat.com.br/typescript-vantagens-mitos-conceitos/"&gt;TypeScript: Vantagens, mitos, dicas e conceitos fundamentais&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E também alguns vídeos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=gmupEp468lY"&gt;TypeScript // Dicionário do Programador&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=kg2-SMolAV0"&gt;TypeScript - O que é e quais os seus benefícios? | Diego Fernandes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=0mYq5LrQN1s"&gt;TypeScript, o início, de forma prática | MasterClass #07&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pra fechar, separei dois cursos gratuitos de Typescript que estão no Youtube e você pode fazer de graça:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/playlist?list=PLlAbYrWSYTiPanrzauGa7vMuve7_vnXG_"&gt;Mini-curso de TypeScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/playlist?list=PLb2HQ45KP0Wsk-p_0c6ImqBAEFEY-LU9H"&gt;Curso: TypeScript - Zero to Hero&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Criando e configurando a aplicação
&lt;/h2&gt;

&lt;p&gt;Existe mais de uma maneira de criar uma aplicação com o Next.js, seguiremos com a recomendada pela Vercel na &lt;a href="https://nextjs.org/docs/getting-started"&gt;documentação do Next&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Criando um projeto Next.js
&lt;/h3&gt;

&lt;p&gt;Assim como no &lt;a href="https://create-react-app.dev/"&gt;CRA&lt;/a&gt;, temos um pacote que gera uma aplicação Next configurada para começarmos a programar.&lt;/p&gt;

&lt;p&gt;Com o Terminal aberto vamos executar o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn create next-app app-name --typescript

# Caso esteja usando o npm:
npx create-next-app app-name --typescript

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse comando vai criar uma aplicação com typescript pronta para sairmos programando. Assim que finalizar a criação do projeto, abra ele no seu editor, eu estou usando o &lt;a href="https://code.visualstudio.com/"&gt;vscode&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;No terminal, podemos executar o comando &lt;code&gt;yarn dev&lt;/code&gt; ou &lt;code&gt;npm run dev&lt;/code&gt; para executar um servidor local de desenvolvimento. Depois de executá-lo, ele vai imprimir no console que o projeto esta disponível no &lt;a href="http://localhost:3000/"&gt;localhost:3000&lt;/a&gt;. Podemos clicar no link segurando a tecla CTRL ou digitar esse caminho na barra de endereços do navegador.&lt;/p&gt;

&lt;h3&gt;
  
  
  Organizando e limpando a estrutura
&lt;/h3&gt;

&lt;p&gt;A primeira coisa que eu faço sempre que inicio um projeto é limpar a estrutura dele.&lt;/p&gt;

&lt;p&gt;Vamos começar apagando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O &lt;a href="http://readme.md/"&gt;README.md&lt;/a&gt;, que está na raiz do projeto.&lt;/li&gt;
&lt;li&gt;Os arquivos que estão dentro da pasta styles.&lt;/li&gt;
&lt;li&gt;A pasta api que esta dentro da pasta pages.&lt;/li&gt;
&lt;li&gt;Vamos apagar também o arquivo vercel.svg de dentro da pasta public e em outro momento iremos substituir o arquivo favicon.ico&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora criaremos uma pasta src na raiz do projeto e movemos para dentro dela a pasta pages e styles que está na raiz do projeto.&lt;/p&gt;

&lt;p&gt;Obs: a pasta pages é rastreada automaticamente pelo Next e os dois únicos lugares que ela pode estar são a raiz ou dentro de src.&lt;/p&gt;

&lt;p&gt;Em seguida, precisamos apagar as referências aos arquivos que deletamos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dentro de src/pages/_app.tsx apagaremos a importação do CSS.&lt;/li&gt;
&lt;li&gt;Dentro de src/pages/index.tsx, apagaremos todas as importações e iremos retornar da função Home apenas um &lt;code&gt;&amp;lt;h1&amp;gt;Hello World&amp;lt;/h1&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como fizemos muitas alterações nos arquivos, vamos reiniciar o servidor que está rodando. Para isso, é só usar o atalho CTRL+C para parar de executá-lo e depois iniciá-lo novamente.&lt;/p&gt;

&lt;p&gt;Ao acessar a página no endereço &lt;a href="http://localhost:3000/"&gt;localhost:3000&lt;/a&gt;, você deve estar vendo o Hello World que colocamos no arquivo index.&lt;/p&gt;




&lt;h2&gt;
  
  
  Finalizando
&lt;/h2&gt;

&lt;p&gt;E isso é tudo, pessoal! Muito obrigado por ter me acompanhado até aqui. Não deixe de conferir os links que eu deixei ao longo do artigo, tem muita coisa legal para se consumir.&lt;/p&gt;

&lt;p&gt;Espero que esse artigo tenha somado para você de alguma forma. Você pode entrar em contato comigo para me passar um feedback ou trocar uma ideia pelo &lt;a href="https://www.linkedin.com/in/vitordevsp/"&gt;Linkedin&lt;/a&gt; ou &lt;a href="https://www.instagram.com/vitordevsp/"&gt;Instagram&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;E não deixe de me seguir lá no &lt;a href="https://github.com/vitordevsp"&gt;GitHub&lt;/a&gt;, sempre estou trabalhando em alguma coisa, você verá meu perfil sem repositórios, mas isso tem um motivo e em breve criarei um post para explicar melhor isso.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>typescript</category>
      <category>react</category>
    </item>
  </channel>
</rss>
