๐Ÿ‡ง๐Ÿ‡ท | Import paths personalizados e como isso pode te ajudar

deixando os seus ์ˆ˜์ž…ํ’ˆ์€ ๋” ์šฐ์•„ํ•˜๊ณ  ์กฐ์ง์ ์ž…๋‹ˆ๋‹ค - Parte 01

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 extraso de ../ nos imports desses arquivos.

ร‰ 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 ํŒŒ์Šคํƒ€, e quando menos esperamos nos deparamos com o seguinte exemplo de import:

import ExampleComponent from '../../../../../../src/components/ExampleComponent/'

์˜ˆ๋ฅผ ๋“ค์–ด acima รฉ real e รฉ muito mais comum do que imaginamos. Infelizmente o uso extraivo desses ../ 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.

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 acima poderia ficar assim์˜ ์˜ˆ:

import ExampleComponent from '~/components/ExampleComponent/'

No example acima, o prefixo ~ foi configurado como um caminho absoluto de um diretรณrio do nosso projeto, nesse caso o diretรณrio รฉ a ํŒŒ์Šคํƒ€ src . Dessa forma, nรฃo importa em qual ํŒŒ์Šคํƒ€ o nosso arquivo esteja, quando utilizarmos o prefixo~/ , semper estaremos importando o path absoluto da ํŒŒ์Šคํƒ€src .

Bem louco nรฉ?!



Fazendo acontecer


ํ•„์š”์— ๋”ฐ๋ผ ์„ค์น˜



Antes de tudo, precisaremos instalar e configurar trรชs dependsรชncias para que essa mรกgica funcione. E elas sรฃo:

react-app-rewired ๋ฐ customize-cra



์•„๋‹ˆ์˜ค ํ”„๋กœ์ ํŠธ, vamos executar ๋˜๋Š” vamos abaixo para personalizarmos as configuraรงรตes do webpack sem a necessidade de utilizar o eject e sem a needsidade de criar um fork do react-scripts.

yarn add -D react-app-rewired customize-cra

๋ฐ”๋ฒจ-ํ”Œ๋Ÿฌ๊ทธ์ธ-๋ฃจํŠธ-๊ฐ€์ ธ์˜ค๊ธฐ



Agora vamos executar o comando abaixo para importarmos arquivos usando paths personalizados.

yarn add -D babel-plugin-root-import

Criando ๋˜๋Š” 'config-overrides.js'



Tambรฉm na raiz do nosso projeto, criaremos um arquivo chamadoconfig-overrides.js . Ele serรก o responsรกvel por estabelecer a ํŒŒ์Šคํƒ€ raiz do nosso projeto.

Vamos inserir esse cรณdigo no arquivo:

const { addBabelPlugin, override } = require('customize-cra')

module.exports = override(
  addBabelPlugin([
    'babel-plugin-root-import',
    {
      rootPathSuffix: 'src',
    },
  ])
)

vida do dev ํŽธ์ง‘์ž ์ด‰์ง„



Ainda na raiz do nosso projeto, criaremos um arquivo chamadojsconfig.json . Ele serรก o responsรกvel por fazer com que o VSCODE entenda os paths personalizados.

Vamos inserir esse cรณdigo no arquivo:

{
  "compilerOptions": {
    "baseUrl": "src",
    "paths": {
      "~/*": ["*"]
    }
  }
}

์ตœ์‹  ์ •๋ณด



Por รบltimo, atualizaremos os scripts no arquivo package.json . Deixe-os dessa ํ˜•์‹:

{
  "scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test",
    "eject": "react-scripts eject"
  }
}

์ด ํŒŒ์ผ์€ ์Šคํฌ๋ฆฝํŠธ ์ œ๊ฑฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์Šคํฌ๋ฆฝํŠธreact-scripts ๋˜๋Š” react-app-rewired๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธ‰ํžˆ!



Agora podemos utilizar qualquer arquivo dentro da nossa ํŒŒ์Šคํƒ€src utilizando o~/ no momento do import.

import ExampleComponent from '~/components/ExampleComponent/'


์ด์žํ˜•...



Se quiser ver esse exemplo na prรกtica, vocรช pode dar uma olhadinha no template que eu criei para projetos React aqui:


๋””์—๊ณ ์‹ค๋ฐ”ํ…Œํฌ / ์ƒ์šฉ๊ตฌ-cra-typescript


์ด ํ”„๋กœ์ ํŠธ๋Š” React ํ”„๋กœ์ ํŠธ์˜ ์ƒ์šฉ๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด ํ…œํ”Œ๋ฆฟ์€ ReactJS ๋ฐ TypeScript๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.





Lรก eu tambรฉm configurei o ESLint e outras coisas para facilitar a estrutura inicial do seu projeto.


Comenta aรญ o que vocรช acha dessa abordagem nos nossos ์ˆ˜์ž…ํ’ˆ :)

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ