O Create React App é uma forma oficialmente suportada de criar aplicativos React. Ele oferece uma configuração de build moderna, sem qualquer configuração prévia necessária. Mas quais são as motivações por trás do CRA, o que ele faz e quando não utilizá-lo? É isso que vamos explorar hoje 🤩
Por que usar o Create React App?
Existem várias formas de criar e desenvolver um app React. O ecossistema desta tecnologia é bem amplo e há bastante flexibilidade nesse sentido. Mas, de modo geral, alguns aspectos estarão sempre presentes independentemente da aplicação:
Module bundler
As Single-Page Applications (SPAs) construídas com React podem vir a possuir inúmeros arquivos Javascript (ou Typescript ^^) se compondo e comunicando entre si pra modificar a DOM. Pra que esses arquivos, conhecidos como módulos, possam interagir com o navegador de maneira eficiente, surge a necessidade de um module bundler.
É a ferramenta que empacotará toda a nossa aplicação de uma forma que o navegador compreenda. No caso do Create React App, a ferramenta escolhida para este fim foi o Webpack.
O Webpack felizão entregando o seu app num bundle só
Transpilador
Você provavelmente vai querer utilizar a sintaxe mais recente do Javascript pra aproveitar as novas funcionalidades da linguagem (ES2015 pra frente). Porém os navegadores podem ainda não entender essas atualizações, ou alguns sim e outros ainda não.
Então pra garantir a mesma experiência pra todos os(as) usuários(as), independente de qual dos principais navegadores eles(as) estejam utilizando, é preciso um transpilador. Os criadores do Create React App optaram pelo Babel, pra transformar o seu código pra uma versão do JS que seja suportada pelos navegadores.
O Babel tentando explicar a sintaxe nova do JS pro navegador
Linter
Espaços ou tabulações, com ou sem ponto-e-vírgula, aspas simples ou duplas… Seja qual for a preferência que você ou a sua equipe tem, é importante manter a consistência e clareza na nossa base de código. É sempre bom seguir alguma diretriz e um linter ajuda bastante com isso.
A escolha do Create React App é o ESLint.
O ESLint brigando com você pra seguir as regras definidas
Biblioteca para testes
Testes são uma parte vital do processo completo de desenvolvimento. Para automatizá-los, há frameworks como o Jest, a escolha da equipe do Create React App.
O Jest depois de testar uma parte do seu programa que tá quebrada
Como usar o Create React App
Pra criar um projeto usando o Create React App é muito fácil. Se você já tem o npm instalado, basta usar o comando:
ou, se quiser utilizar Typescript ao invés de Javascript:
P.S.: Se você já está utilizando o Create React App em um projeto e quer atualizá-lo, é só dar um:
Quando você cria um novo projeto com o CRA, ele gera toda a estrutura de diretórios (como abaixo) e instalará as dependências necessárias pra você já sair codando! 🎉
NOME_DO_PROJETO
├── README.md
├── node_modules
├── package.json
├── .gitignore
├── public
│ ├── favicon.ico
│ ├── index.html
│ └── manifest.json
└── src
├── App.css
├── App.js
├── App.test.js
├── index.css
├── index.js
├── logo.svg
└── serviceWorker.js
└── setupTests.js
São disponibilizados alguns scripts já “de fábrica”:
-
yarn start
pra iniciar um servidor de desenvolvimento local. Assim você pode visualizar o resultado do app em tempo real emhttp://localhost:3000/
à medida que vai fazendo alterações no código e salvando-as. -
yarn test
pra iniciar o executor de teste no modo watch; conforme você faz alterações em seu código, os testes serão executados novamente para garantir que continuam passando. -
yarn build
pra gerar um bundle da aplicação. Diferente do bundle que é gerado para desenvolvimento, este é otimizado, minimizado e comprimido, sendo então pronto pra produção. Você pode fazer deploy dele usando o Netlify, por exemplo, como explico neste post. -
yarn eject
pra remover todas as abstrações do CRA. Os arquivos de configuração, dependências de aplicativos e scripts NPM serão expostos e disponíveis para modificação conforme necessário. Atenção! Essa ação é irreversível, não tem como “desejetar”. Veremos a seguir os casos em que esse comando pode ser necessário.
Quando não usar o Create React App
Como vimos, o Create React App é uma excelente ferramenta para iniciar qualquer projeto sem tem que se preocupar em configurar vários detalhes.
É ótimo para aprender a desenvolver, fazer um protótipo, e a maioria das aplicações reais que vão pra produção também poderão desfrutar dessas facilidades. Entretanto, há casos em que alguma customização se faz necessária.
Talvez você queira alterar qualquer uma daquelas ferramentas que o CRA já escolheu e configurou inicialmente por você. Ou só está curioso(a) pra saber como tudo funciona por debaixo dos panos 😂.
Seja qual for o objetivo, tenha em mente de que “ejetar” o CRA é uma viagem só de ida, não tem um comando pra abstrair as coisas de volta.
A estrutura do projeto após ejetar vai ficar parecida com a seguinte:
# Arquivos de configuração do Jest e Webpack; polyfills para Promises e Object.assign()
├── config/
│ ├── env.js
│ ├── jest/
│ │ ├── cssTransform.js
│ │ └── fileTransform.js
│ ├── paths.js
│ ├── polyfills.js
│ ├── webpack.config.dev.js
│ └── webpack.config.prod.js
├── node_modules/ # Pacotes instalados que são necessários pro Create-React-App
├── package.json
├── public/
│ ├── favicon.ico
│ └── index.html
├── scripts/ # React Scripts, agora expostos
│ ├── build.js
│ ├── start.js
│ └── test.js
├── src/
│ ├── components/
│ │ ├── board.js
│ │ ├── game.js
│ │ └── square.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ └── utils/
│ └── index.js
└── yarn.lock