<?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: Liandro Silva</title>
    <description>The latest articles on DEV Community by Liandro Silva (@liandro-silva).</description>
    <link>https://dev.to/liandro-silva</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%2F429647%2F4641ed03-b7ab-4dc4-93e8-523bfac756d6.jpeg</url>
      <title>DEV Community: Liandro Silva</title>
      <link>https://dev.to/liandro-silva</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/liandro-silva"/>
    <language>en</language>
    <item>
      <title>Organizando importações no Nest.js</title>
      <dc:creator>Liandro Silva</dc:creator>
      <pubDate>Mon, 11 Jul 2022 21:09:54 +0000</pubDate>
      <link>https://dev.to/liandro-silva/organizando-importacoes-no-nestjs-3peg</link>
      <guid>https://dev.to/liandro-silva/organizando-importacoes-no-nestjs-3peg</guid>
      <description>&lt;p&gt;&lt;strong&gt;Sumário&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Contexto&lt;/li&gt;
&lt;li&gt;
Preparando o terreno

&lt;ol&gt;
&lt;li&gt;tsconfig.json&lt;/li&gt;
&lt;li&gt;Path Mapping&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;

Configuração

&lt;ol&gt;
&lt;li&gt;Configurando o tsconfig.json&lt;/li&gt;
&lt;li&gt;Configurando o diretório shared&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

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

&lt;/ol&gt;




&lt;h2&gt;
  
  
  Contexto
&lt;/h2&gt;

&lt;p&gt;Estive praticando bastante Nest.js com um pequeno projeto pessoal. No meio do desenvolvimento, o fato de tanto o Auto Import ou mesmo as importações manuais que eu fazia gerarem códigos muito compridos e bagunçados, como no exemplo abaixo, me incomodava bastante.&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Anything&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;../../../shared/anything.ts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Na prática quando isso se mistura com Services, Controllers, Interceptors e muitas outras coisas, nós temos uma verbosidade muito grande para coisas muito simples e que podem, inclusive, atrapalhar em um processo futuro de leitura do código. Então eu fiquei pensando:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Como eu poderia organizar as minhas importações para obter algo bem mais semântico e organizado?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Felizmente, sanei minha dúvida e é sobre isso que quero dissertar aqui nesta publicação!&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparando o terreno
&lt;/h2&gt;

&lt;p&gt;Antes de começarmos quaisquer configuração é importante que você entenda, de maneira geral, o que vamos ver, por isso, neste tópico, vamos passar pela definição de cada arquivo que vamos manipular.&lt;/p&gt;

&lt;h3&gt;
  
  
  tsconfig.json
&lt;/h3&gt;

&lt;p&gt;o arquivo &lt;strong&gt;tsconfig.json&lt;/strong&gt; é responsável por especificar as configurações que serão aplicadas na compilação de nosso projeto.&lt;/p&gt;

&lt;p&gt;Este arquivo sempre estará localizado na raíz de seu projeto.&lt;/p&gt;

&lt;h3&gt;
  
  
  Path Mapping
&lt;/h3&gt;

&lt;p&gt;O TypeScript tem suporte ao &lt;strong&gt;&lt;a href="https://www.typescriptlang.org/pt/docs/handbook/module-resolution.html#path-mapping" rel="noopener noreferrer"&gt;mapeamento de paths&lt;/a&gt;&lt;/strong&gt;. Esta ferramenta, nos permite definir &lt;strong&gt;keywords&lt;/strong&gt; que servirão de atalhos para um caminho específico dentro da nossa aplicação, em outras palavras, nós conseguimos ter um resultado como este abaixo:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Anything&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;@shared&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso confere a nossa aplicação uma organização absurda, além de facilitar a leitura do código.&lt;/p&gt;

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

&lt;p&gt;Neste tópico iremos aplicar de fato toda configuração necessária para alcançarmos nosso objetivo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configurando o tsconfig.json
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dentro do arquivo &lt;code&gt;tsconfig.json&lt;/code&gt;, insira a propriedade &lt;a href="https://www.typescriptlang.org/pt/docs/handbook/module-resolution.html" rel="noopener noreferrer"&gt;moduleResolution&lt;/a&gt; e defina seu valor como &lt;code&gt;Node&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"moduleResolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Node"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Dentro do arquivo &lt;code&gt;tsconfig.json&lt;/code&gt;, insira a propriedade &lt;a href="https://www.typescriptlang.org/tsconfig#baseUrl" rel="noopener noreferrer"&gt;baseUrl&lt;/a&gt; e defina seu valor como &lt;code&gt;.&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dentro do arquivo &lt;code&gt;tsconfig.json&lt;/code&gt;, insira a propriedade paths, como no exemplo abaixo:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&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;"@shared"&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;"./src/shared/index"&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;Ao final, teremos essa configuração:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"moduleResolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Node"&lt;/span&gt;&lt;span class="err"&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;"."&lt;/span&gt;&lt;span class="err"&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;"@shared"&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;"./src/shared/index"&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;O que nós fizemos foi possibilitar que ao usarmos a notação &lt;code&gt;import from {} from "@shared"&lt;/code&gt; o compilador consiga entender que na verdade nós estamos apontando para &lt;code&gt;./src/shared/index&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
Entenda que este é apenas um exemplo, adapte para sua necessidade, ok?
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Configurando o diretório shared
&lt;/h3&gt;

&lt;p&gt;Agora que configuramos todo nosso arquivo &lt;code&gt;tsconfig.json&lt;/code&gt;, precisamos agora adequar nosso diretório a estrutura desejada, vamos lá!&lt;/p&gt;

&lt;p&gt;Primeiro, certifique-se de ter o nosso diretório &lt;code&gt;shared&lt;/code&gt; de exemplo dentro do diretório &lt;code&gt;src&lt;/code&gt; com a formatação correta, como no exemplo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;shared
├── index.ts
├── anyfile.ts
├── anyfolder
│   └── index.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O que nós devemos entender agora é que podemos ter &lt;strong&gt;N&lt;/strong&gt; arquivos e diretórios dentro de shared, porém, cada diretório dentro de shared deve conter um index responsável por exportar os arquivos alocados dentro de si, vamos para um exemplo mais claro.&lt;/p&gt;

&lt;p&gt;dentro do diretório &lt;code&gt;anyfolder&lt;/code&gt; crie um arquivo chamado anyfile.ts, dentro deste arquivo insira o código abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AnyClass&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(){}&lt;/span&gt;
 &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;anyMethod&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Any value&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;agora, ainda no diretório &lt;code&gt;anyfolder&lt;/code&gt; crie um arquivo chamado index.ts, dentro deste arquivo insira o código abaixo:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AnyClass&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;./anyfolder&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;Anyfile&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;./anyfile&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AnyClass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Anyfile&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, agora, você pode importar de qualquer lugar da aplicação a classe &lt;code&gt;AnyClass&lt;/code&gt; simplesmente fazendo isso&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AnyClass&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;@shared&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Ao final desta publicação espero que tenha ficado claro a forma como você pode organizar todas as importações de suas aplicação. Vale ressaltar que este formato apresentado não é bala de prata, adapte para sua necessidade. Se restar alguma dúvida, por favor, poste aqui nos comentários, ficarei feliz em ajudar você!&lt;/p&gt;

&lt;p&gt;Se este artigo foi útil para você, com certeza pode ser para muitas outras pessoas, o que acha de compartilhar com amigos e grupos?&lt;/p&gt;

</description>
      <category>node</category>
      <category>typescript</category>
      <category>tutorial</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
