<?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>Forem: Diego Silva</title>
    <description>The latest articles on Forem by Diego Silva (@diegosilvatech).</description>
    <link>https://forem.com/diegosilvatech</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%2F657768%2F09dbef33-071d-452a-a462-9febfc4ab00b.png</url>
      <title>Forem: Diego Silva</title>
      <link>https://forem.com/diegosilvatech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/diegosilvatech"/>
    <language>en</language>
    <item>
      <title>🇧🇷 | Hierarquia de imports</title>
      <dc:creator>Diego Silva</dc:creator>
      <pubDate>Tue, 29 Jun 2021 13:14:15 +0000</pubDate>
      <link>https://forem.com/coderamos/hierarquia-de-imports-56j6</link>
      <guid>https://forem.com/coderamos/hierarquia-de-imports-56j6</guid>
      <description>&lt;p&gt;&lt;em&gt;deixando os seus imports mais elegantes e organizados - Parte 02&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Hoje continuaremos falando sobre como deixar os nossos imports mais elegantes e organizados. Para isso, precisamos falar sobre &lt;strong&gt;hierarquia de importações&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é hierarquia de importações?
&lt;/h2&gt;

&lt;p&gt;Como o próprio nome já esclarece, hierarquia de importações é a ordem de prioridade das dependências importadas no nosso código.&lt;/p&gt;

&lt;p&gt;É muito comum que os nossos arquivos &lt;code&gt;.js&lt;/code&gt; e &lt;code&gt;.jsx&lt;/code&gt; importem muitas bibliotecas, componentes, páginas, controllers, services, helpers, estilos, ou seja, uma infinidades de tipos de arquivos e dados distintos.&lt;/p&gt;

&lt;p&gt;O exemplo abaixo é muito comum no cotidiano de um desenvolvedor front end:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Container&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./styles.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;combineReducers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;redux&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Main&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/pages/Main&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Dashboard&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Dashboard&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Home&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/pages/Home&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Routes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/routes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Olhando para o código acima você pode se questionar: "Não vejo nenhum problema nesse código".&lt;/p&gt;

&lt;p&gt;E de fato, não há. As dependências necessárias foram importadas e estão prontas para serem utilizadas.&lt;/p&gt;



&lt;blockquote&gt;
&lt;p&gt;Mas, se podemos deixar mais organizado, &lt;strong&gt;por quê não?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Abaixo eu mostro o &lt;strong&gt;mesmo exemplo&lt;/strong&gt;, só que mais &lt;strong&gt;organizado&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;combineReducers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;redux&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Home&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/pages/Home&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Main&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/pages/Main&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Dashboard&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Dashboard&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Routes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/routes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Container&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./styles.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;No exemplo acima, eu ordenei as importações da seguinte forma:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;em primeiro lugar: todas as dependências que eu considero as mais &lt;strong&gt;importantes&lt;/strong&gt; da minha aplicação. Por exemplo, todas as que iniciam com 'react' e 'redux'&lt;/li&gt;
&lt;li&gt;em seguida, todas as outras bibliotecas e &lt;strong&gt;módulos instalados no package.json&lt;/strong&gt;. Por exemplo, Prop Types, Storybook, Unform, entre outros&lt;/li&gt;
&lt;li&gt;depois, todos os arquivos internos, que iniciam com o alias &lt;code&gt;~/&lt;/code&gt; ou &lt;code&gt;@&lt;/code&gt;. Por exemplo, &lt;code&gt;~/components&lt;/code&gt;, &lt;code&gt;~/pages&lt;/code&gt;, &lt;code&gt;~/styles&lt;/code&gt;, &lt;code&gt;@controllers&lt;/code&gt;, &lt;code&gt;@models&lt;/code&gt;, entre outros. No post &lt;a href="https://coderamos.vercel.app/import-paths-personalizados-como-isso-pode-te-ajudar/"&gt;Import paths personalizados e como isso pode te ajudar&lt;/a&gt; eu mostro como podemos criar e configurar import paths personalizados para facilitar as importações da nossa aplicação&lt;/li&gt;
&lt;li&gt;então, as &lt;strong&gt;rotas&lt;/strong&gt; da minha aplicação&lt;/li&gt;
&lt;li&gt;e por último, os meus &lt;strong&gt;estilos&lt;/strong&gt;. Nesse caso, arquivos com o nome &lt;code&gt;.styled.js&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// primeiro, tudo que começa com 'react' e 'redux'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;combineReducers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;redux&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// depois, todos os módulos e bibliotecas importadas&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// depois, tudo o que inicia com um alias '~/pages' ou '@pages'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Home&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/pages/Home&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Main&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/pages/Main&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// depois, tudo o que inicia com um alias '~/components' ou '@components'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Dashboard&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Dashboard&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// então, as minhas rotas&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Routes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/routes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// e por último, os meus estilos&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Container&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./styles.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;É claro que manter essa hierarquia para todo o nosso código gasta muito tempo, atenção e cuidado.&lt;/p&gt;

&lt;p&gt;Mas ainda bem que podemos automatizar essa tarefa, não é mesmo?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/W3a0zO282fuBpsqqyD/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/W3a0zO282fuBpsqqyD/giphy.gif" alt="inteligente, não?!"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Conhecendo o &lt;a href="https://github.com/Tibfib/eslint-plugin-import-helpers"&gt;eslint-plugin-import-helpers&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;eslint-plugin-import-helpers&lt;/strong&gt; é um pacote que foi criado pelo &lt;a href="https://twitter.com/Tibfib"&gt;Will Honey&lt;/a&gt;, e tem como objetivo complementar o &lt;a href="https://github.com/benmosher/eslint-plugin-import"&gt;eslint-plugin-import&lt;/a&gt;. Ele trás um caso de uso muito importante que ainda falta no eslint-plugin-import: &lt;strong&gt;a ordem das importações&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Sobre o &lt;code&gt;order-imports&lt;/code&gt; e como ele funciona
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;eslint-plugin-import-helpers&lt;/strong&gt; trás (até a data desse post) apenas o plugin &lt;strong&gt;order-imports&lt;/strong&gt;. Esse plugin permite que seja possível configurar uma hierarquia de importações com apenas uma simples configuração arquivo &lt;code&gt;.eslintrc.js&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Fazendo acontecer
&lt;/h2&gt;

&lt;p&gt;Antes de tudo, você precisará ter no seu projeto o &lt;strong&gt;ESLint&lt;/strong&gt; e o &lt;strong&gt;Prettier&lt;/strong&gt; configurados. Se por acaso você ainda não configurou, sugiro que siga esse turorial:&lt;/p&gt;


  


&lt;p&gt;Após a instalação e configuração do ESLint e Prettier, podemos seguir com os próximos passos.&lt;/p&gt;
&lt;h3&gt;
  
  
  Instalando e configurando o &lt;code&gt;eslint-plugin-import-helpers&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Na raiz do nosso projeto &lt;strong&gt;react&lt;/strong&gt;, vamos instalar o puglin:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add &lt;span class="nt"&gt;-D&lt;/span&gt; eslint-plugin-import-helpers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Agora, vamos configurar a regra &lt;strong&gt;import-helpers/order-imports&lt;/strong&gt; no arquivo &lt;code&gt;.eslintrc.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// .eslintrc.js&lt;/span&gt;
&lt;span class="nx"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;import-helpers/order-imports&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;warn&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// exibe um alerta no editor&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;newlinesBetween&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;always&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// insere uma linha em branco após cada grupo de prioridade&lt;/span&gt;
      &lt;span class="na"&gt;groups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/^react/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/^redux/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// primeiro grupo: tudo que inicia com 'react' e 'redux'&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/styled-components/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// segundo grupo: tudo o que for importado diretamente da biblioteca styled-components. Isso é para garantir que a primeira importação nos arquivos styles.js seja sempre a do styled-components.&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;module&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// terceiro grupo: tudo que é um módulo (qualquer biblioteca listada no arquivo package.json)&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/prop-types/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// quarto grupo: a importação do prop-types&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/^~/pages/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// quinto grupo: todas as minhas páginas&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/^~/components/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// sexto grupo: todas os meus componentes&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;parent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sibling&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// sétimo grupo: qualquer arquivo pai, irmão ou filho do arquivo atual&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/routes/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// oitavo grupo: as minhas rotas&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/^~/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// nono grupo: todos os outros arquivos importados pelo alias configurado&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/styles/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// último grupo: os meus estilos&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;alphabetize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;order&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;asc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;ignoreCase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="c1"&gt;// configura as importações por ordem alfabética (crescente), ignorando maiúsculas e minúsculas&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Tudo pronto!&lt;/p&gt;

&lt;p&gt;Se você configurou o prettier para corrigir automaticamente sugestões de melhorias do ESLint, sempre que essa hierarquia não for respeitada, o VSCODE irá reorganizar os imports automaticamente assim que o arquivo for salvo.&lt;/p&gt;



&lt;p&gt;Se quiser ver esse exemplo na prática, você pode dar uma olhadinha no template que eu criei para projetos React aqui: &lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i3JOwpme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/coderamos"&gt;
        coderamos
      &lt;/a&gt; / &lt;a href="https://github.com/coderamos/template-reactjs"&gt;
        template-reactjs
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This project contains the basic structure for React projects. It also includes my settings for babel-plugin-root-import, eslint-plugin-import-helpers, prop-types, react-router-dom, styled-components and more...
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Lá eu já configurei o ESLint, Prettier e outras coisas para facilitar a estrutura inicial do seu projeto.&lt;/p&gt;




&lt;p&gt;Comenta ai o que achou :)&lt;/p&gt;

</description>
      <category>codequality</category>
      <category>braziliandevs</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>🇧🇷 | Import paths personalizados e como isso pode te ajudar</title>
      <dc:creator>Diego Silva</dc:creator>
      <pubDate>Tue, 29 Jun 2021 12:53:20 +0000</pubDate>
      <link>https://forem.com/diegosilvatech/import-paths-personalizados-e-como-isso-pode-te-ajudar-40b3</link>
      <guid>https://forem.com/diegosilvatech/import-paths-personalizados-e-como-isso-pode-te-ajudar-40b3</guid>
      <description>&lt;p&gt;&lt;em&gt;deixando os seus imports mais elegantes e organizados - Parte 01&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Se existe uma dor que me incomoda quando estou desenvolvendo uma aplicação com muitos arquivos, é quando esses arquivos importam outros arquivos, e isso provoca um excesso de &lt;code&gt;../&lt;/code&gt; nos imports desses arquivos.&lt;/p&gt;

&lt;p&gt;É comum vermos que a medida que a nossa aplicação vai crescendo, as pastas dos arquivos do nosso projeto vão se aninhando cada vez mais dentro de outras pastas, e quando menos esperamos nos deparamos com o seguinte exemplo de import:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../../../../../../src/components/ExampleComponent/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;O exemplo acima é real e é muito mais comum do que imaginamos. Infelizmente o uso excessivo desses &lt;code&gt;../&lt;/code&gt; traz algumas dores no momento em que precisamos dar manutenção ao nosso código, dentre elas, o retrabalho de consertar o caminho relativo toda vez que precisamos alterar o local de um arquivo importado ou do arquivo importador.&lt;/p&gt;

&lt;p&gt;Uma das formas mais simples de deixarmos esse import mais elegante e organizado é criando um path personalizado e deixando-o como absoluto. Dessa forma, o exemplo acima poderia ficar assim:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/ExampleComponent/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;No exemplo acima, o prefixo &lt;code&gt;~&lt;/code&gt; foi configurado como um caminho absoluto de um diretório do nosso projeto, nesse caso o diretório é a pasta &lt;code&gt;src&lt;/code&gt;. Dessa forma, não importa em qual pasta o nosso arquivo esteja, quando utilizarmos o prefixo &lt;code&gt;~/&lt;/code&gt;, sempre estaremos importando o path absoluto da pasta &lt;code&gt;src&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Bem louco né?!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/1yiPWNsQ1vq7V90fRY/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/1yiPWNsQ1vq7V90fRY/giphy.gif" alt="amazing gif" width="500" height="431"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Fazendo acontecer
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Instalando as dependências necessárias
&lt;/h3&gt;

&lt;p&gt;Antes de tudo, precisaremos instalar e configurar três dependências para que essa mágica funcione. E elas são:&lt;/p&gt;
&lt;h4&gt;
  
  
  react-app-rewired e customize-cra
&lt;/h4&gt;

&lt;p&gt;Na raiz do nosso projeto, vamos executar o comando abaixo para personalizarmos as configurações do webpack sem a necessidade de utilizar o &lt;code&gt;eject&lt;/code&gt; e sem a necessidade de criar um fork do react-scripts.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add &lt;span class="nt"&gt;-D&lt;/span&gt; react-app-rewired customize-cra
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  babel-plugin-root-import
&lt;/h4&gt;

&lt;p&gt;Agora vamos executar o comando abaixo para importarmos arquivos usando paths personalizados.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add &lt;span class="nt"&gt;-D&lt;/span&gt; babel-plugin-root-import
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Criando o 'config-overrides.js'
&lt;/h3&gt;

&lt;p&gt;Também na raiz do nosso projeto, criaremos um arquivo chamado &lt;code&gt;config-overrides.js&lt;/code&gt;. Ele será o responsável por estabelecer a pasta raiz do nosso projeto.&lt;/p&gt;

&lt;p&gt;Vamos inserir esse código no arquivo:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;addBabelPlugin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;override&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;customize-cra&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;override&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;addBabelPlugin&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;babel-plugin-root-import&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;rootPathSuffix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;src&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Facilitando a vida do &lt;del&gt;dev&lt;/del&gt; editor
&lt;/h3&gt;

&lt;p&gt;Ainda na raiz do nosso projeto, criaremos um arquivo chamado &lt;code&gt;jsconfig.json&lt;/code&gt;. Ele será o responsável por fazer com que o VSCODE entenda os paths personalizados.&lt;/p&gt;

&lt;p&gt;Vamos inserir esse código 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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"compilerOptions"&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;"baseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"paths"&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;"~/*"&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="s2"&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;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;h3&gt;
  
  
  Últimos detalhes
&lt;/h3&gt;

&lt;p&gt;Por último, atualizaremos os scripts no arquivo &lt;code&gt;package.json&lt;/code&gt;. Deixe-os dessa forma:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&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;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react-app-rewired start"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react-app-rewired build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react-app-rewired test"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"eject"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react-scripts eject"&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;Como você pode observar, estamos substituindo todos os scripts &lt;code&gt;react-scripts&lt;/code&gt; por &lt;code&gt;react-app-rewired&lt;/code&gt;, com exceção do script &lt;strong&gt;eject&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Tudo pronto!
&lt;/h3&gt;

&lt;p&gt;Agora podemos utilizar qualquer arquivo dentro da nossa pasta &lt;code&gt;src&lt;/code&gt; utilizando o &lt;code&gt;~/&lt;/code&gt; no momento do import.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/ExampleComponent/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  E...
&lt;/h3&gt;

&lt;p&gt;Se quiser ver esse exemplo na prática, você pode dar uma olhadinha no template que eu criei para projetos React aqui:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/diegosilvatech"&gt;
        diegosilvatech
      &lt;/a&gt; / &lt;a href="https://github.com/diegosilvatech/boilerplate-cra-typescript"&gt;
        boilerplate-cra-typescript
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This project is a boilerplate for React project. This template was built with ReactJS and TypeScript.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Lá eu também configurei o ESLint e outras coisas para facilitar a estrutura inicial do seu projeto.&lt;/p&gt;




&lt;p&gt;Comenta aí o que você acha dessa abordagem nos nossos imports :)&lt;/p&gt;

</description>
      <category>codequality</category>
      <category>braziliandevs</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>🇧🇷 | Produtividade com styled-components</title>
      <dc:creator>Diego Silva</dc:creator>
      <pubDate>Tue, 29 Jun 2021 00:04:26 +0000</pubDate>
      <link>https://forem.com/coderamos/produtividade-com-styled-components-67e</link>
      <guid>https://forem.com/coderamos/produtividade-com-styled-components-67e</guid>
      <description>&lt;p&gt;&lt;em&gt;duas boas práticas para melhorar o seu projeto com essa biblioteca fenomenal&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;styled-components&lt;/strong&gt; é uma biblioteca para estilizar a sua aplicação através do JavaScript e é utilizada principalmente na estilização de projetos React e React Native.&lt;/p&gt;

&lt;p&gt;Quando pensamos em estilizar algo, também deveríamos estar pensando em como organizar esses estilos, e para quem está começando no mundo do desenvolvimento frontend, essas duas práticas são fundamentais para a escrita e manutenção de um bom código:&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Sempre que possível, crie estilos isolados.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Crie estilos isolados
&lt;/h3&gt;

&lt;p&gt;Através dessa prática temos acesso aos estilos do seu componente de forma mais rápida e isso gera mais produtividade e torna a manutenibilidade seus estilos muito mais fácil.&lt;/p&gt;

&lt;p&gt;Uma prática muito utilizada no mercado é criar o arquivo de estilos juntamente com o arquivo principal (&lt;code&gt;index.js&lt;/code&gt;) do seu componente / página.&lt;/p&gt;

&lt;p&gt;Nomear o seu arquivo como &lt;code&gt;styles.js&lt;/code&gt; ou &lt;code&gt;styled.js&lt;/code&gt; também é uma boa prática. Esses dois nomes são muito utilizados.&lt;/p&gt;

&lt;p&gt;Como exemplo, essa é a estrutura dos arquivos de estilo que utilizei em um template para React, no meu GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HyN5gUEF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h4lt44meb4ywjrbpi6zd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HyN5gUEF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h4lt44meb4ywjrbpi6zd.png" alt="files structure"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Crie estilos semânticos
&lt;/h3&gt;

&lt;p&gt;Apesar do styled-components ser muito conhecido e adotado, é comum vermos muitos componentes de agrupamento e que deveriam possui escopo semântico, sendo criados como uma simples &lt;code&gt;div&lt;/code&gt;. É extremamente importante não esquecermos de utilizar as tags de forma correta  e consciente.&lt;/p&gt;

&lt;p&gt;Esse é um exemplo de como criamos e exportamos um componente estilizado com styled-components:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponentContainer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="s2"&gt;``&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Podemos acessar todas as outras tags como propriedades do styled, como &lt;code&gt;styled.header&lt;/code&gt;, &lt;code&gt;styled.nav&lt;/code&gt;, &lt;code&gt;styled.section&lt;/code&gt;, &lt;code&gt;styled.article&lt;/code&gt;, &lt;code&gt;styled.aside&lt;/code&gt;, &lt;code&gt;styled.footer&lt;/code&gt;, dentre outras.&lt;/p&gt;



&lt;p&gt;Você pode acessar o template mencionado acima clicando abaixo:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i3JOwpme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/coderamos"&gt;
        coderamos
      &lt;/a&gt; / &lt;a href="https://github.com/coderamos/template-reactjs"&gt;
        template-reactjs
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This project contains the basic structure for React projects. It also includes my settings for babel-plugin-root-import, eslint-plugin-import-helpers, prop-types, react-router-dom, styled-components and more...
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;






&lt;p&gt;Baixe o projeto e comenta aí o que achou :)&lt;/p&gt;

</description>
      <category>react</category>
      <category>braziliandevs</category>
      <category>css</category>
      <category>beginners</category>
    </item>
    <item>
      <title>🇧🇷 | Melhorando o seu título no currículo</title>
      <dc:creator>Diego Silva</dc:creator>
      <pubDate>Mon, 28 Jun 2021 23:30:46 +0000</pubDate>
      <link>https://forem.com/diegosilvatech/melhorando-o-seu-titulo-no-curriculo-1p68</link>
      <guid>https://forem.com/diegosilvatech/melhorando-o-seu-titulo-no-curriculo-1p68</guid>
      <description>&lt;p&gt;&lt;em&gt;afinal, é Front End, Front-End ou Frontend?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Toda vez que preciso preencher o meu cargo em qualquer formulário, fico em dúvida entre Front End, front-End ou Frontend.&lt;/p&gt;

&lt;p&gt;Já vi de tudo, inclusive abordagens diferentes dentro do mesmo &lt;del&gt;perfil do LinkedIn&lt;/del&gt; currículo.&lt;/p&gt;

&lt;p&gt;Mas se existem várias formas diferentes de escrever, qual é a diferença entre elas?&lt;/p&gt;

&lt;p&gt;Partindo desse ponto, percebo que existem duas respostas diferentes: a que trata sobre a etimologia dessas palavras e a que trata as diferenças na prática, ou seja, a que mais vai te ajudar a conseguir um trabalho.&lt;/p&gt;

&lt;p&gt;E é sobre a segunda opção que eu quero tratar aqui.&lt;/p&gt;

&lt;p&gt;Como você já deve ter observado, eu optei pela utilização do termo &lt;code&gt;Front End&lt;/code&gt; e foi por um motivo bem simples: é o termo buscado no Google dentre as três opções, na &lt;strong&gt;maioria&lt;/strong&gt; dos países, inclusive o Brasil.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_IYdFX1P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ysv2id2phum5b1rgpfdq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_IYdFX1P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ysv2id2phum5b1rgpfdq.png" alt="google trends results for frontend word"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Acredito que usar o termo correto mais buscado traz mais chances de ser encontrado por um recrutador, visto que os mecanismos de buscas ranqueiam melhor os termos mais buscados em comparação aos menos buscados.&lt;/p&gt;

&lt;p&gt;Se o seu objetivo é ser achado por recrutadores fora do Brasil, vale a pena checar no &lt;a href="https://trends.google.com.br/trends/explore?geo=BR&amp;amp;q=front%20end,front-end,frontend"&gt;Google Trends&lt;/a&gt; qual é o termo mais buscado lá.&lt;/p&gt;

&lt;p&gt;E você, possui alguma justificativa para não usar dessa forma?&lt;/p&gt;

&lt;p&gt;Comenta aí :)&lt;/p&gt;

</description>
      <category>curriculo</category>
      <category>braziliandevs</category>
      <category>linkedin</category>
      <category>interview</category>
    </item>
    <item>
      <title>Import hierarchy</title>
      <dc:creator>Diego Silva</dc:creator>
      <pubDate>Mon, 28 Jun 2021 20:04:16 +0000</pubDate>
      <link>https://forem.com/coderamos/import-hierarchy-2deh</link>
      <guid>https://forem.com/coderamos/import-hierarchy-2deh</guid>
      <description>&lt;p&gt;&lt;em&gt;making your imports more elegant and organized | part II&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Today we will continue talking about how to make our imports more elegant and organized. For that, we need to talk about &lt;strong&gt;import hierarchy&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Import Hierarchy?
&lt;/h2&gt;

&lt;p&gt;As the name itself makes clear, import hierarchy is the order of priority of the dependencies imported in our code.&lt;/p&gt;

&lt;p&gt;It is very common that our &lt;code&gt;.js&lt;/code&gt; and &lt;code&gt;.jsx&lt;/code&gt; files import many libraries, components, pages, controllers, services, helpers, styles, that is, a multitude of different file types and data.&lt;/p&gt;

&lt;p&gt;The example below is very common in the daily life of a front end developer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Container&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./styles.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;combineReducers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;redux&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Main&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/pages/Main&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Dashboard&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Dashboard&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Home&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/pages/Home&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Routes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/routes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Looking at the code above you may wonder: "I don't see any problem with this code".&lt;/p&gt;

&lt;p&gt;And in fact, there isn't. The required dependencies have been imported and are ready to be used.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;But if we can make it more organized, &lt;strong&gt;why not&lt;/strong&gt;?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Below I show the same example, only more organized:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;combineReducers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;redux&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Home&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/pages/Home&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Main&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/pages/Main&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Dashboard&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Dashboard&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Routes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/routes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Container&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./styles.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In the example above, I ordered the imports as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;first&lt;/strong&gt;: all the dependencies that I consider the most important of my application. For example, all those starting with 'react' and 'redux'&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;then&lt;/strong&gt;: all other libraries and modules installed in package.json. For example, Prop Types, Storybook, Unform, among others&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;then&lt;/strong&gt;: all internal files, which start with the alias &lt;code&gt;~/&lt;/code&gt; or &lt;code&gt;@&lt;/code&gt;. For example, &lt;code&gt;~/components&lt;/code&gt;, &lt;code&gt;~/pages&lt;/code&gt;, &lt;code&gt;~/styles&lt;/code&gt;, &lt;code&gt;@controllers&lt;/code&gt;, &lt;code&gt;@models&lt;/code&gt;, and so on. In the post &lt;a href="https://dev.to/coderamos/custom-import-paths-and-how-it-can-help-you-a1h"&gt;Import custom paths&lt;/a&gt; and how this can help you I show you how we can create and configure custom import paths to facilitate the import of our application&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;so&lt;/strong&gt;: the &lt;strong&gt;routes&lt;/strong&gt; of my application"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;and lastly&lt;/strong&gt;: my styles. In this case, files named &lt;code&gt;.styled.js&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// first, everything that starts with 'react' and 'redux'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;combineReducers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;redux&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// then all imported modules and libraries&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// then anything that starts with an alias '~/pages' or '@pages'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Home&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/pages/Home&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Main&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/pages/Main&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// then anything that starts with an alias '~/components' or '@components'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Dashboard&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/Dashboard&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// so my routes&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Routes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/routes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// and finally, my styles&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Container&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./styles.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Of course, maintaining this hierarchy for all our code takes a lot of time, attention, and care.&lt;/p&gt;

&lt;p&gt;But it's a good thing we can automate this task, isn't it?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/W3a0zO282fuBpsqqyD/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/W3a0zO282fuBpsqqyD/giphy.gif" alt="do you think?"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Getting to know &lt;a href="https://github.com/Tibfib/eslint-plugin-import-helpers"&gt;eslint-plugin-import-helpers&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;eslint-plugin-import-helpers&lt;/strong&gt; is a package that was created by &lt;a href="https://twitter.com/Tibfib"&gt;Will Honey&lt;/a&gt;, and aims to complement &lt;a href="https://github.com/benmosher/eslint-plugin-import"&gt;eslint-plugin-import&lt;/a&gt;. It brings a very important use case that is still missing from eslint-plugin-import: the &lt;strong&gt;order of imports&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  About order-imports and how it works
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;eslint-plugin-import-helpers&lt;/strong&gt; brings (as of the date of this post) only the order-imports plugin. This plugin allows you to configure an import hierarchy with just a simple &lt;code&gt;.eslintrc.js&lt;/code&gt; configuration file.&lt;/p&gt;
&lt;h3&gt;
  
  
  Making it happen
&lt;/h3&gt;

&lt;p&gt;First of all, you will need to have &lt;strong&gt;ESLint&lt;/strong&gt; and &lt;strong&gt;Prettier&lt;/strong&gt; configured in your project. If by chance you haven't configured it yet, I suggest you follow this tutorial:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/TI4v4Y8yRjw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;After installing and configuring ESLint and Prettier, we can proceed with the next steps.&lt;/p&gt;
&lt;h4&gt;
  
  
  Installing and configuring eslint-plugin-import-helpers
&lt;/h4&gt;

&lt;p&gt;At the root of our &lt;strong&gt;react&lt;/strong&gt; project, let's install puglin:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add &lt;span class="nt"&gt;-D&lt;/span&gt; eslint-plugin-import-helpers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now, let's configure the &lt;strong&gt;import-helpers/order-imports&lt;/strong&gt; rule in the &lt;code&gt;.eslintrc.js&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// .eslintrc.js&lt;/span&gt;
&lt;span class="nx"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;import-helpers/order-imports&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;warn&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// displays an alert in the editor&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;newlinesBetween&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;always&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// inserts a blank line after each priority group&lt;/span&gt;
      &lt;span class="na"&gt;groups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/^react/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/^redux/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// first group: everything that starts with 'react' and 'redux'&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/styled-components/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// second group: everything that is imported directly from the styled-components library. This is to ensure that the first import in styles.js files is always styled-components.&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;module&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// third group: everything that is a module (any library listed in the package.json file)&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/prop-types/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// fourth group: importing prop-types&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/^~/pages/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// fifth group: all my pages&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/^~/components/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// sixth group: all my components&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;parent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sibling&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// seventh group: any parent, sibling, or child file of the current file&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/routes/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// eighth group: my routes&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/^~/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// ninth group: all other files imported by the configured alias&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/styles/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// last group: my styles&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;alphabetize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;order&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;asc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;ignoreCase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="c1"&gt;// configures imports in alphabetical (ascending) order, ignoring case&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;All ready!&lt;/p&gt;

&lt;p&gt;If you have configured prettier to automatically fix ESLint improvement suggestions, whenever this hierarchy is not respected, VSCODE will reorganize the imports automatically as soon as the file is saved.&lt;/p&gt;



&lt;p&gt;If you want to see this example in practice, you can take a look at the template I created for React projects here:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i3JOwpme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/coderamos"&gt;
        coderamos
      &lt;/a&gt; / &lt;a href="https://github.com/coderamos/template-reactjs"&gt;
        template-reactjs
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This project contains the basic structure for React projects. It also includes my settings for babel-plugin-root-import, eslint-plugin-import-helpers, prop-types, react-router-dom, styled-components and more...
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;






&lt;p&gt;Comment there what you think about this post :)&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>codequality</category>
    </item>
    <item>
      <title>Styled Components and their benefits</title>
      <dc:creator>Diego Silva</dc:creator>
      <pubDate>Mon, 28 Jun 2021 15:33:56 +0000</pubDate>
      <link>https://forem.com/coderamos/styled-components-and-their-benefits-33ag</link>
      <guid>https://forem.com/coderamos/styled-components-and-their-benefits-33ag</guid>
      <description>&lt;p&gt;&lt;em&gt;the main advantages of using CSS in JavaScript&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CSS, the nice guy
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;CSS is very difficult&lt;/strong&gt;. If they tell you otherwise, it's because they just want to make you happy&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I remember when I saw this phrase in one of &lt;a href="https://twitter.com/Willian_justen"&gt;Willian Justen's&lt;/a&gt; courses. I must have stopped for five minutes while thinking about how real she is.&lt;/p&gt;

&lt;p&gt;Do not get me wrong. It's really cool to work with CSS and we're often happy to be able to create our component &lt;del&gt;designs&lt;/del&gt; and pages with this technology, but CSS also has a lot of problems.&lt;/p&gt;

&lt;p&gt;If we don't worry about minimizing CSS issues and don't do the bad practices prevention work in our code, as the application grows, problems and bad practices grow together.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Maintaining standards is boring, time-consuming and expensive, but only if you do it the wrong way.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is very difficult for a single programmer to know all the components of an application, especially when they are constantly updated. Now imagine a repository that is maintained by five teams, each team with at least four developers, each developer with different practices and seniority.&lt;/p&gt;

&lt;p&gt;Thankfully, there are amazing tools to facilitate code standardization for our projects, such as ESLint, Prettier and EditorConfig. These tools, in line with &lt;code&gt;pre-commit&lt;/code&gt; and &lt;code&gt;pre-push&lt;/code&gt; routines, greatly facilitate the code standardization and &lt;code&gt;code review&lt;/code&gt; process. But that's a topic for another post.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;CSS is &lt;strong&gt;not ahead&lt;/strong&gt; of its time&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;CSS is evolving. We already have some pretty cool features, like the possibility of using variables inside CSS, but even with some new features, we still have some issues.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/13FrpeVH09Zrb2/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/13FrpeVH09Zrb2/giphy.gif" alt="fixing css"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In the beginning&lt;/strong&gt;: I'll fix it here, and... ops it broke there..., hummm just fix it here and there... &lt;strong&gt;At the end&lt;/strong&gt;: it feels like I'm at the beginning&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Known Issues
&lt;/h2&gt;

&lt;p&gt;Some of the main CSS issues are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STYLE COLLISION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As CSS is not defined on a per-component or per-page basis, it is loaded onto our website and styling is applied over all visible HTML. When we need to import a library, it can happen that this library has the same classes or has a greater specificity that ends up colliding with our code, generating some problems in the style of our application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UNUSED CODE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We often write CSS thinking of various ways to represent a component, such as buttons in different shapes. We need to load CSS for all styles, but we don't necessarily need to use all styles in the same page. With that, we ended up loading all the styles of buttons that won't be used there. This brings more problems for the client who ends up spending more bandwidth unnecessarily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DIFFICULTY IN MAINTENANCE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Many times when we need to update a style, we end up breaking another style in another piece of code that has nothing to do with the first style. This makes maintenance much more costly than it should be and we need to keep "digging" a lot of code so we don't run the risk of breaking something that shouldn't be broken.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Less, Sass, Stylus. How do they live? What do you eat?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The pre-processors are there and they help a lot, especially with the possibility of using variables in CSS (a feature that didn't exist before in css, but now exists) and with the ease of working with style nesting (cascades), but they continued with the classic problems, in addition to making room for &lt;strong&gt;bad practices&lt;/strong&gt;, such as excessive nesting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/*nested*/&lt;/span&gt;
&lt;span class="nt"&gt;section&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="err"&gt;nav&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;ul&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
      &lt;span class="err"&gt;li&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
        &lt;span class="err"&gt;a&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="err"&gt;}&lt;/span&gt;
    &lt;span class="err"&gt;}&lt;/span&gt;
  &lt;span class="err"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/*in line*/&lt;/span&gt;
&lt;span class="nt"&gt;nav&lt;/span&gt; &lt;span class="nt"&gt;ul&lt;/span&gt; &lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Who has never seen an &lt;code&gt;scss&lt;/code&gt; code with all this nesting, right?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/dCB56ll26OPsdTg7ou/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/dCB56ll26OPsdTg7ou/giphy.gif" alt="taking a look"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This nesting is not a good practice, because you end up creating enormous specificity for this component, and therefore if we want to change this style somewhere else, we will need to make this code even more specific, often needing to insert an &lt;code&gt;id&lt;/code&gt; or more &lt;code&gt;selector&lt;/code&gt;, or even an &lt;code&gt;!important&lt;/code&gt;, which isn't cool.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GsrIeGjG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://encrypted-tbn0.gstatic.com/images%3Fq%3Dtbn%253AANd9GcQEre0SNjz-tMDNBR7PeGEeqc2B6htOB6-MKA%26usqp%3DCAU" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GsrIeGjG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://encrypted-tbn0.gstatic.com/images%3Fq%3Dtbn%253AANd9GcQEre0SNjz-tMDNBR7PeGEeqc2B6htOB6-MKA%26usqp%3DCAU" alt="slap"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  STYLED-COMPONENTS, your little friend
&lt;/h2&gt;

&lt;p&gt;Styled Components is a library that, through a set of practices, solves complex CSS problems.&lt;/p&gt;

&lt;p&gt;The main advantages of using &lt;code&gt;styled-components&lt;/code&gt; are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NO BUGS WITH CLASS NAMES&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;styled-components generates unique class names for each style. Even if elements have the same class, they will not suffer style cohesion. For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// button/index.js&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"primary"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// public/index.html&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"sc-fznLPX jckqBg primary"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;REMOVAL OF UNUSED CSS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is the component's responsibility to create or import its style from the styles file. If the component is not used, none of your CSS will be loaded into the page.&lt;/p&gt;

&lt;p&gt;Every deleted component of the page will also have its CSS deleted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DYNAMIC STYLES&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is possible to change the style of the components through the &lt;code&gt;properties&lt;/code&gt; and &lt;code&gt;themes&lt;/code&gt; received.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Passing the &lt;code&gt;outlined&lt;/code&gt; property to the Button component:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// button/index.js&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;outlined&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Edit profile&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Changing the Button component's style through the passed property:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// button/styles.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="s2"&gt;`
  background-color: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;outlined&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;transparent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;;
`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;As we can see, I'm checking if the Button component has the &lt;code&gt;outlined&lt;/code&gt; property. If yes, then I apply the &lt;code&gt;background-color&lt;/code&gt; as transparent. If not, I apply the value of the &lt;code&gt;colors.primary&lt;/code&gt; property, defined in the &lt;code&gt;theme.js&lt;/code&gt; file, to the &lt;code&gt;background-color&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I'll still write how to configure a theme using styled-components and put the link here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VENDOR AUTOMATIC PREFIXING&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Properties like &lt;code&gt;-webkit&lt;/code&gt;, &lt;code&gt;-moz-&lt;/code&gt;, &lt;code&gt;-ms&lt;/code&gt; and &lt;code&gt;-o-&lt;/code&gt; do not need to be entered anymore, as &lt;code&gt;styled-components&lt;/code&gt; does this work automatically.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="cm"&gt;/* with styled-components */&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;section&lt;/span&gt;&lt;span class="s2"&gt;`
  transition: all 2s linear;
`&lt;/span&gt;
&lt;span class="cm"&gt;/* without styled-components */&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;moz&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="nx"&gt;linear&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="nx"&gt;linear&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="nx"&gt;linear&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;webkit&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="nx"&gt;linear&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="nx"&gt;linear&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://i.giphy.com/media/dycoeyAvTEkaKgvcWT/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/dycoeyAvTEkaKgvcWT/giphy.gif" alt="surprise"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SIMPLIFIED AND PAIN-FREE MAINTENANCE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The style being changed only matches the component that imports it.&lt;/p&gt;

&lt;p&gt;Styled Components is awesome, isn't it?&lt;/p&gt;



&lt;p&gt;If you want to see this example in practice, you can take a look at the template I created for React projects here:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i3JOwpme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/coderamos"&gt;
        coderamos
      &lt;/a&gt; / &lt;a href="https://github.com/coderamos/template-reactjs"&gt;
        template-reactjs
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This project contains the basic structure for React projects. It also includes my settings for babel-plugin-root-import, eslint-plugin-import-helpers, prop-types, react-router-dom, styled-components and more...
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;






&lt;p&gt;Comment there what you think about this use styled-components :)&lt;/p&gt;




</description>
      <category>css</category>
      <category>javascript</category>
      <category>devexperience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Custom import paths and how it can help you</title>
      <dc:creator>Diego Silva</dc:creator>
      <pubDate>Mon, 28 Jun 2021 14:56:37 +0000</pubDate>
      <link>https://forem.com/diegosilvatech/custom-import-paths-and-how-it-can-help-you-a1h</link>
      <guid>https://forem.com/diegosilvatech/custom-import-paths-and-how-it-can-help-you-a1h</guid>
      <description>&lt;p&gt;&lt;em&gt;making your imports more elegant and organized&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If there's a pain that bothers me when I'm developing an application with many files, it's when those files import other files, and that causes an excess of &lt;code&gt;../&lt;/code&gt; in the imports of those files.&lt;/p&gt;

&lt;p&gt;It is common to see that as our application grows, the folders of our project files are nested more and more inside other folders, and when we least expect it we come across the following import example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../../../../../../src/components/ExampleComponent/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The example above is real and is much more common than we think. Unfortunately, the excessive use of these &lt;code&gt;../&lt;/code&gt; brings some pain when we need to maintain our code, among them, the rework of fixing the relative path every time we need to change the location of an imported file or import file.&lt;/p&gt;

&lt;p&gt;One of the simplest ways to make this import more elegant and organized is to create a custom path and leave it as an absolute. Thus, the example above could look like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/ExampleComponent/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In the example above, the &lt;code&gt;~&lt;/code&gt; prefix was set as an absolute path to a directory in our project, in this case the directory is the &lt;code&gt;src&lt;/code&gt; folder. That way, no matter what folder our file is in, when we use the &lt;code&gt;~/&lt;/code&gt; prefix, we will always be importing the absolute path of the &lt;code&gt;src&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;Really good right?!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/1yiPWNsQ1vq7V90fRY/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/1yiPWNsQ1vq7V90fRY/giphy.gif" alt="wow gif" width="500" height="431"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Making it happen
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Installing dependencies
&lt;/h4&gt;

&lt;p&gt;First of all, we'll need to install and configure three dependencies for this magic to work. And they are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;react-app-rewired and customize-cra&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the root of our project, let's run the command below to customize the webpack settings without the need to use eject and without the need to create a react-scripts fork.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add &lt;span class="nt"&gt;-D&lt;/span&gt; react-app-rewired customize-cra
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;babel-plugin-root-import&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now let's run the command below to import files using custom paths.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add &lt;span class="nt"&gt;-D&lt;/span&gt; babel-plugin-root-import
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Creating &lt;code&gt;config-overrides.js&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Also at the root of our project we will create a file called &lt;code&gt;config-overrides.js&lt;/code&gt;. He will be responsible for establishing the root folder of our project.&lt;/p&gt;

&lt;p&gt;Let's insert this code into the file:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;addBabelPlugin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;override&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;customize-cra&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;override&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;addBabelPlugin&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;babel-plugin-root-import&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;rootPathSuffix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;src&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Making life easier for the &lt;del&gt;dev&lt;/del&gt; editor
&lt;/h4&gt;

&lt;p&gt;Still at the root of our project, we will create a file called &lt;code&gt;jsconfig.json&lt;/code&gt;. He will be responsible for making VSCODE understand the custom paths.&lt;/p&gt;

&lt;p&gt;Let's insert this code into the file:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"compilerOptions"&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;"baseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"paths"&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;"~/*"&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="s2"&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;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;h4&gt;
  
  
  Last details
&lt;/h4&gt;

&lt;p&gt;Lastly, we will update the scripts in the package.json file. Leave them this way:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&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;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react-app-rewired start"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react-app-rewired build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react-app-rewired test"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"eject"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react-scripts eject"&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;As you can see, we are replacing all &lt;code&gt;react-scripts&lt;/code&gt; with &lt;code&gt;react-app-rewired&lt;/code&gt; with the exception of the &lt;code&gt;eject&lt;/code&gt; script.&lt;/p&gt;
&lt;h3&gt;
  
  
  All ready!
&lt;/h3&gt;

&lt;p&gt;Now we can use any file inside our src folder using &lt;code&gt;~/&lt;/code&gt; at import time.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~/components/ExampleComponent/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  And...
&lt;/h3&gt;

&lt;p&gt;If you want to see this example in practice, you can take a look at the template I created for React projects here:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/diegosilvatech"&gt;
        diegosilvatech
      &lt;/a&gt; / &lt;a href="https://github.com/diegosilvatech/boilerplate-cra-typescript"&gt;
        boilerplate-cra-typescript
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This project is a boilerplate for React project. This template was built with ReactJS and TypeScript.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;






&lt;p&gt;Comment there what you think about this approach in our imports :)&lt;/p&gt;




</description>
      <category>react</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>codequality</category>
    </item>
    <item>
      <title>Productivity with styled-components</title>
      <dc:creator>Diego Silva</dc:creator>
      <pubDate>Mon, 28 Jun 2021 14:32:29 +0000</pubDate>
      <link>https://forem.com/diegosilvatech/productivity-with-styled-components-237h</link>
      <guid>https://forem.com/diegosilvatech/productivity-with-styled-components-237h</guid>
      <description>&lt;p&gt;&lt;em&gt;two best practices to improve your project with this phenomenal library&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;styled-components&lt;/strong&gt; is a library for styling your application through JavaScript and is mainly used in the styling of React and React Native projects.&lt;/p&gt;

&lt;p&gt;When we think about styling something, we should also be thinking about how to organize these styles, and for those just starting out in the frontend development world, these two practices are fundamental to writing and maintaining good code:&lt;/p&gt;

&lt;h3&gt;
  
  
  Create isolated styles
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Whenever possible, create isolated styles.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Through this practice we have access to your component styles faster and this generates more productivity and makes maintaining your styles much easier.&lt;/p&gt;

&lt;p&gt;A widely used practice in the market is to create the styles file together with the main file (&lt;code&gt;index.js&lt;/code&gt;) of your component / page.&lt;/p&gt;

&lt;p&gt;Naming your file &lt;code&gt;styles.js&lt;/code&gt; or &lt;code&gt;styled.js&lt;/code&gt; is also good practice. These two names are used a lot.&lt;/p&gt;

&lt;p&gt;As an example, this is the structure of the style files I used in a template for React, on my GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HyN5gUEF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h4lt44meb4ywjrbpi6zd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HyN5gUEF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h4lt44meb4ywjrbpi6zd.png" alt="files structure" width="382" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Create semantic styles
&lt;/h3&gt;

&lt;p&gt;Although styled-components is well known and adopted, it is common to see many grouping components that should have semantic scope being created as a simple &lt;code&gt;div&lt;/code&gt;. It is extremely important that we do not forget to use tags correctly and consciously.&lt;/p&gt;

&lt;p&gt;This is an example of how we create and export a styled component with styled-components:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponentContainer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="s2"&gt;``&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;We can access all other tags as styled properties, like: &lt;code&gt;styled.header&lt;/code&gt;, &lt;code&gt;styled.nav&lt;/code&gt;, &lt;code&gt;styled.section&lt;/code&gt;, &lt;code&gt;styled.article&lt;/code&gt;, &lt;code&gt;styled.aside&lt;/code&gt;, &lt;code&gt;styled.footer&lt;/code&gt;,&lt;br&gt;
among others.&lt;/p&gt;



&lt;p&gt;You can access the template mentioned above by clicking here:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/diegosilvatech"&gt;
        diegosilvatech
      &lt;/a&gt; / &lt;a href="https://github.com/diegosilvatech/boilerplate-cra-typescript"&gt;
        boilerplate-cra-typescript
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This project is a boilerplate for React project. This template was built with ReactJS and TypeScript.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;






&lt;p&gt;Comment there what you think of this file structure :)&lt;/p&gt;

</description>
      <category>css</category>
      <category>javascript</category>
      <category>react</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Improving your resume title</title>
      <dc:creator>Diego Silva</dc:creator>
      <pubDate>Mon, 28 Jun 2021 14:20:54 +0000</pubDate>
      <link>https://forem.com/diegosilvatech/improving-your-resume-title-4dfa</link>
      <guid>https://forem.com/diegosilvatech/improving-your-resume-title-4dfa</guid>
      <description>&lt;p&gt;&lt;em&gt;which is correct? Front End, Front End or Frontend?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every time I need to fill out my position on any form, I am in doubt between Front End, Front-End or Frontend.&lt;/p&gt;

&lt;p&gt;I've seen it all, including different approaches within the same &lt;del&gt;LinkedIn profile&lt;/del&gt; resume.&lt;/p&gt;

&lt;p&gt;But if there are several different ways of writing, what's the difference between them?&lt;/p&gt;

&lt;p&gt;From this point on, I realize that there are two different answers: the one dealing with the etymology of these words and the one dealing with differences in practice, that is, the one that will help you the most to get a job.&lt;/p&gt;

&lt;p&gt;And it's about the second option I want to deal with here.&lt;/p&gt;

&lt;p&gt;As you may have already noticed, I chose to use the term &lt;code&gt;Front End&lt;/code&gt; and it was for a very simple reason: it is the term searched on Google among the three options, in most countries, including &lt;strong&gt;Brazil&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_IYdFX1P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ysv2id2phum5b1rgpfdq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_IYdFX1P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ysv2id2phum5b1rgpfdq.png" alt="google trends results for frontend word"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I believe that using the correct most searched term is more likely to be found by a recruiter, as search engines rank the most searched terms better compared to the least searched terms.&lt;/p&gt;

&lt;p&gt;If your goal is to be found by recruiters outside Brazil, it's worth checking &lt;a href="https://trends.google.com.br/trends/explore?geo=BR&amp;amp;q=front%20end,front-end,frontend"&gt;Google Trends&lt;/a&gt; for the most searched term there.&lt;/p&gt;




&lt;p&gt;And you, do you have any justification for not using it that way?&lt;/p&gt;

&lt;p&gt;Comment there :)&lt;/p&gt;

</description>
      <category>resume</category>
      <category>career</category>
      <category>linkedin</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
