๐ง๐ท | Import paths personalizados e como isso pode te ajudar
7857 ๋จ์ด javascriptbraziliandevsbeginnerscodequality
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 chamado
config-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 chamado
jsconfig.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 ์์ ํ :)
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ง๐ท | Import paths personalizados e como isso pode te ajudar), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/diegosilvatech/import-paths-personalizados-e-como-isso-pode-te-ajudar-40b3ํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค