<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gabriel Nunes</title>
    <description>The latest articles on DEV Community by Gabriel Nunes (@gabrielnunes).</description>
    <link>https://dev.to/gabrielnunes</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%2F592466%2F39f36950-f156-4054-ad4f-398058cd728a.jpeg</url>
      <title>DEV Community: Gabriel Nunes</title>
      <link>https://dev.to/gabrielnunes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gabrielnunes"/>
    <language>en</language>
    <item>
      <title>Um guia sobre estruturação de pastas para projetos em Next.js</title>
      <dc:creator>Gabriel Nunes</dc:creator>
      <pubDate>Fri, 01 Apr 2022 18:23:11 +0000</pubDate>
      <link>https://dev.to/trybe/um-guia-sobre-estruturacao-de-pastas-para-projetos-em-nextjs-5b6j</link>
      <guid>https://dev.to/trybe/um-guia-sobre-estruturacao-de-pastas-para-projetos-em-nextjs-5b6j</guid>
      <description>&lt;p&gt;Sempre que vou iniciar um novo projeto usando Next.js a primeira coisa que vem na cabeça é: como eu mantenho as coisas organizadas em um padrão de Developer Experience semelhante ao que o time do Next já criou?&lt;/p&gt;

&lt;p&gt;É realmente impressionante a forma como é simples, fácil de entender e prático. Toda nova atualização mais facilidades são adicionadas ao framework e ele fica cada vez mais maravilhoso (ok, sou fã, como descobriu?).&lt;/p&gt;

&lt;p&gt;Aqui na Trybe, começamos recentemente o trabalho de migração do site institucional para Next.js, e tivemos que pesquisar um bocado para entender a melhor forma de organizar as pastas do projeto. Não existe uma unanimidade, algumas pessoas gostam de usar um padrão semelhante ao que usam em projetos em React, outras criam seus próprios padrões. Que foi o nosso caso.&lt;/p&gt;

&lt;p&gt;Decidimos primeiro entender qual seria a estrutura de um site, para depois pensarmos na estrutura das pastas, sempre tentando entender o que seria mais fácil de compreender somente olhando para o projeto... e ficou assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;- site-trybe
    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; __tests__
        index.test.tsx
        primeiros-passos.test.tsx
    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; components
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; _ui
            &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Button
                Button.tsx
                Button.module.scss
                Button.test.tsx
                index.tsx
            &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Navbar
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; home
            &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Hero
                constants.ts
                Hero.tsx
                Hero.module.scss
                Hero.test.tsx
                index.tsx
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; first-steps
            &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Video
            &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Form
    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; hooks
    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; pages
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; primeiros-passos
            confirmacao.tsx
            index.tsx
        _app.tsx
        index.tsx
    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; public
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; images
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; fonts
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; icons
    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; styles
        theme.scss
        global.scss
    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; utils
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; constants
            navigation.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora, vamos entender melhor o que temos em cada pasta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testes de snapshot para cada página
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; __tests__
        index.test.tsx
        primeiros-passos.test.tsx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para manter a consistência do site, e evitar, ou melhor, avisar, quando alterações sejam feitas em conteúdos ou ordem de componentes, decidimos criar testes simples para cada página do site, apenas para manter o snapshot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pasta de componentes separados por páginas
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; components
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; _ui
            &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Button
                Button.tsx
                Button.module.scss
                Button.test.tsx
                index.tsx
            &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Navbar
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; home
            &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Hero
                constants.ts
                Hero.tsx
                Hero.module.scss
                Hero.test.tsx
                index.tsx
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; first-steps
            &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Video
            &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Form
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A pasta &lt;code&gt;_ui&lt;/code&gt; é onde ficam todos os componentes em comum entre várias páginas do site, quase que como se fosse o nosso Design System.&lt;/p&gt;

&lt;p&gt;Além disso, cada página do site possui uma pasta dentro da pasta de componentes. Dentro dessa pasta, então, são adicionados todos os componentes, com seus arquivos de estilo, constantes que são usadas apenas ali e seu arquivo de teste (caso seja necessário).&lt;/p&gt;

&lt;p&gt;Dessa forma, podemos ter dois componentes &lt;code&gt;&amp;lt;Hero /&amp;gt;&lt;/code&gt;, porém, eles estarão em suas pastas relacionadas a cada página/contexto. Nós também focamos em manter os textos e organização do layout em cada componente, dessa forma, uma página apenas importa os componentes que formam ela.&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="cm"&gt;/* /pages/empresas-parceiras/index.tsx */&lt;/span&gt;

&lt;span class="cm"&gt;/* ... aqui vão todos os imports */&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ParnerCompanies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NextPage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Page&lt;/span&gt;
        &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Contrate programadores e desenvolvedores pela Trybe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Empresas inovadoras contratam talentos de tecnologia na Trybe. E o melhor: elas não pagam nada por isso. Contrate agora!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Hero&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;CompleteTraining&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;WhyHireTrybers&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;WhatCompaniesSays&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;OurTraining&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;WorldOfPossibility&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Benefits&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;HowItWorks&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;NoCosts&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Page&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;ParnerCompanies&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Outras pastas complementares
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; hooks
    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; public
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; images
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; fonts
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; icons
    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; styles
    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; utils
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; constants
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fora a pasta &lt;code&gt;pages&lt;/code&gt; que é padrão dos projetos Next.js, também criamos pastas para deixar organizados os estilos, os hooks e os utils, como as constantes globais do projeto.&lt;/p&gt;

&lt;p&gt;Também separamos a pasta &lt;code&gt;public&lt;/code&gt; em outras três: images, fonts e icons.&lt;/p&gt;

&lt;h1&gt;
  
  
  Organização é tudo para uma pessoa desenvolvedora feliz
&lt;/h1&gt;

&lt;p&gt;Sim, meu amigo e minha amiga. Ter um projeto organizado é o que nos dá vontade de trabalhar todo dia.&lt;/p&gt;

&lt;p&gt;Acredito que este artigo pode ajudar você, que estava perdido em qual arquitetura utilizar na hora de deixar o seu projeto Next.js mais arrumadinho.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>nextjs</category>
    </item>
  </channel>
</rss>
