<?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: Melquisedec Felipe</title>
    <description>The latest articles on DEV Community by Melquisedec Felipe (@melquisedecfelipe).</description>
    <link>https://dev.to/melquisedecfelipe</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%2F401053%2Fa9bb908c-dd52-403b-8fd8-573c38b675a7.jpeg</url>
      <title>DEV Community: Melquisedec Felipe</title>
      <link>https://dev.to/melquisedecfelipe</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/melquisedecfelipe"/>
    <language>en</language>
    <item>
      <title>Configurando ESLint no Node com Express e Typescript</title>
      <dc:creator>Melquisedec Felipe</dc:creator>
      <pubDate>Wed, 03 Jun 2020 12:13:34 +0000</pubDate>
      <link>https://dev.to/melquisedecfelipe/configurando-eslint-no-node-com-express-e-typescript-58p9</link>
      <guid>https://dev.to/melquisedecfelipe/configurando-eslint-no-node-com-express-e-typescript-58p9</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Olá me chamo &lt;a href="https://www.linkedin.com/in/melquisedecfelipe/"&gt;Melquisedec&lt;/a&gt;, espero que você esteja bem! Hoje irei mostrar o que é Lint, quais são os benefícios e como configurá-lo em um projeto &lt;a href="https://nodejs.org/en/"&gt;Node&lt;/a&gt; utilizando &lt;a href="https://expressjs.com/"&gt;Express&lt;/a&gt; e &lt;a href="https://www.typescriptlang.org/"&gt;Typescript&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Antes de mais nada, o que é Lint
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;“Linting is the automated checking of your source code for programmatic and stylistic errors. This is done by using a lint tool (otherwise known as linter). A lint tool is a basic static code analyzer.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Simplificando, lint é uma correção automática que algumas ferramentas (como por exemplo &lt;a href="https://eslint.org/"&gt;ESLint&lt;/a&gt;, &lt;a href="https://pypi.org/project/pylint/"&gt;Pylint&lt;/a&gt;, entre outras), realizam para padronizar o código com regras pré-definidas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quais as vantagens do Lint?
&lt;/h2&gt;

&lt;p&gt;Uma das maiores vantagens do lint é a padronização, ele analisa todo o código, realiza a correção de forma automática, aplica o padrão pré-definido e alerta caso o mesmo não esteja sendo seguido, levando a uma redução considerável de erros de sintáticos.&lt;/p&gt;

&lt;p&gt;Também facilita a integração de um desenvolvedor novo no time (claro que isso envolve outras variáveis), mas apresentar para um dev uma documentação de lint, o ajuda a se encontrar no projeto/produto mesmo sem ter muita noção da regra de negócio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Show me the code.
&lt;/h2&gt;

&lt;p&gt;O guia a seguir é realizado utilizando o &lt;a href="https://yarnpkg.com/"&gt;Yarn&lt;/a&gt; como gerenciador de pacotes e o &lt;a href="https://code.visualstudio.com/"&gt;VSCode&lt;/a&gt; como editor de texto, instale as seguintes extensões em seu editor de texto: &lt;a href="https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig"&gt;EditorConfig&lt;/a&gt;, &lt;a href="https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig"&gt;ESLint&lt;/a&gt; e &lt;a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode"&gt;Prettier&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As configurações tem como base a guia de estilo do &lt;a href="https://github.com/airbnb/javascript"&gt;Airbnb&lt;/a&gt;, um dos mais utilizados atualmente. Além disso, faço algumas configurações no &lt;a href="https://eslint.org/"&gt;ESLint&lt;/a&gt; para facilitar a importação de arquivos &lt;a href="https://www.typescriptlang.org/"&gt;Typescript&lt;/a&gt;, configuro o &lt;a href="https://prettier.io/"&gt;Prettier&lt;/a&gt; para realizar a formatação do estilo e adiciono o &lt;a href="https://editorconfig.org/"&gt;EditorConfig&lt;/a&gt; para realizar as configurações do editor.&lt;/p&gt;

&lt;p&gt;No terminal crie uma pasta com o comando &lt;code&gt;mkdir node-template&lt;/code&gt; e, em seguida, entre na pasta utilizando &lt;code&gt;cd node-template&lt;/code&gt;. Agora utilizaremos o yarn para iniciar um novo projeto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ yarn init -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Em seguida adicione o express:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ yarn add express
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;E algumas outras dependências de desenvolvimento:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ yarn add @types/express typescript ts-node-dev eslint -D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A seguir devemos iniciar as configurações do Typescript com 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 tsc --init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Vamos alterar somente as configurações &lt;code&gt;outDir&lt;/code&gt; e &lt;code&gt;rootDir&lt;/code&gt;, deixando-as da seguinte forma:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Também será necessário adicionar os seguintes script no &lt;code&gt;package.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
  "build": "tsc",
  "dev": "ts-node-dev --transpileOnly --ignore-watch node_modules src/server.ts"
},
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Em seguida, crie uma pasta &lt;code&gt;src&lt;/code&gt; com um arquivo chamado &lt;code&gt;server.ts&lt;/code&gt;. A estrutura deve ficar igual a esta:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node-template
├── package.json
├── src
│   └── server.ts
├── tsconfig.json
└── yarn.lock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Adicione o seguinte código no &lt;code&gt;server.ts&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Instale as outras dependências de desenvolvimento:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ yarn add @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint-config-airbnb-base eslint-config-prettier eslint-import-resolver-typescript eslint-plugin-import eslint-plugin-prettier prettier -D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Após isso as configurações serão todas realizadas na raiz do diretório &lt;code&gt;node-template&lt;/code&gt;. Vamos inicializar o ESLint:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ yarn eslint --init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Em seguida selecione as seguintes opções:&lt;br&gt;
&lt;a href="https://i.giphy.com/media/VI3CMwizh9j2ay4vVj/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/VI3CMwizh9j2ay4vVj/giphy.gif" alt="Configuração ESLint" width="687" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Substitua as configurações do arquivo &lt;code&gt;.eslintrc.json&lt;/code&gt; por essas:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Crie o arquivo &lt;code&gt;.eslintignore&lt;/code&gt; na raiz e adicione:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/*.js’
node_modules
dist
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Crie o arquivo &lt;code&gt;prettier.config.js&lt;/code&gt; na raiz e adicione:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module.exports = {
  singleQuote: true,
  trailingComma: 'all',
  arrowParens: 'avoid',
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por fim, concluímos todas as configurações. Tendo como resultado:&lt;br&gt;
&lt;a href="https://i.giphy.com/media/dyoOkM6L6NhmbpPMbj/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/dyoOkM6L6NhmbpPMbj/giphy.gif" alt="Resultado" width="830" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para inicializar o projeto, basta rodar 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 dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Seguir uma style guide é uma ótima prática nos dias de hoje e ter um bom lint configurado para isso aumenta demais a produtividade, ainda mais se implementada juntamente com algum padronizador de commit. Não é uma regra nem bala de prata, o time precisa estar bem alinhado. Se não acaba perdendo todo o potencial e melhorias que agregariam na pipeline.&lt;/p&gt;

&lt;p&gt;Se você chegou até aqui, &lt;strong&gt;obrigado&lt;/strong&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/melquisedecfelipe/node-template"&gt;melquisedecfelipe/node-template&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.perforce.com/blog/qac/why-linting-important-and-how-use-lint-tools"&gt;What Is Lint Code? And Why Is Linting Important?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/airbnb/javascript"&gt;airbnb/javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://eslint.org/docs/rules/"&gt;List of available rules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://prettier.io/docs/en/install.html"&gt;Install - Prettier&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>node</category>
      <category>typescript</category>
      <category>express</category>
      <category>eslint</category>
    </item>
  </channel>
</rss>
