Entendendo create-react-app
Começar uma aplicação react sempre foi um pouco complicado. Eu poderia estar brincando dizendo isso no meu blog ou no meu twitter, mas é uma realidade. O time de desenvolvimento do React sabe que esta é uma dor para toda a comunidade e resolveram criar o create-react-app.
Mas eu venho acompanhando alguns projetos de “starter-kit” nos ultimos meses, e você provavelmente deve estar se perguntando se este é um verdadeiro starter-kit.
Sera que o Facebook’s starter-kit fará todos os outros obsoletos?
Em uma comparação com o top 5 que temos disponiveis hoje para começar um novo projeto, o cenário atual é este:
- facebookincubator/create-react-app com 16241
- kriasoft/react-starter-kit com 11860
- mxstbr/react-boilerplate com 10772
- erikras/react-redux-universal-hot-example com 8225
- davezuko/react-redux-starter-kit com 6978
Wow. São muitas estrelas, e isso fez com que o create-react-app tenha crescido rapidamente para #1 posição.
Provavelmente muitas dessas estrelas tenham vindas por ser um projeto do Facebook, etc. Mas enfim, vamos dar uma olhada no projeto e ver como as coisas funcionam.
O que faz create-react-app melhor?
A maioria dos projetos lhe aconselha a clonar o repositório para começar.
Isso gera algumas desvantagens:
- Quando o projeto é atualizado, você provavelmente não tera essas atualizações;
- Seu projeto começa com pelomenos 50-100 dependencias para gerenciar e manter atualizadas;
- Seu projeto é um boilerplate com uma configuração um tanto complexa.
create-react-app funciona um pouco diferente.
Quando você cria um novo projeto, você adiciona apenas uma única dependencia, o pacote react-scripts.
O pacote react-scripts
contem tudo o que você precisa como uma sub-dependencia do seu projeto. Isso significa que ele é muito menor, limpo, fácil de ler e com um boilerplate muito menor.
Ferramentas
create-react-app é baseado em várias outras ferramentas, sendo as principais:
- Webpack
- Babel
- PostCSS w/ Autoprefixer
- Jest
- Flow (opcional)
Se você não curte nenhuma das tecnologias acima, isso é um incentivo para não utilizar create-react-app
.
Vamos para o passo-a-passo e começar uma nova aplicação utilizando essa nova ferramenta.
First install create-react-app as a global library.
Primeiramente precisamos instalar create-react-app
globalmente:
Agora para criar uma aplicação, utilizamos o comando create-react-app <app-name>
. Eu vou chamar a aplicação deste post de ‘react-app’. Então o meu comando sera o seguinte:
Agora nós vamos ter que aguardar alguns segundos enquanto o npm baixa todas as dependencias. Uma vez que o processo tenha acabado é como mágica, tudo o que você precisa fazer é rodar sua aplicação:
Se você seguiu todas essas etapas você deve ver seu aplicativo rodando.
A aplicação criada é bem simples. Ela esconde os detalhes do aplicação muito bem.
Dentro do projeto nós temoas uma estrutura como esta:
e um package.json muito pequeno:
Você provavelmente notou que temos quatro comandos em scripts: start
, build
, test
e eject
.
start é o que você provavelmente esta familiar. Ele irá rodar a sua aplicação localmente no endereço localhost:3000
.
build como o nome já diz, vai preparar sua aplicação corretamente para produção (modificando NODE_ENV para “production”), minificando seu código e adicionando e adicionando hash da revisão onde tudo será disponibilizado na pasta build. Você pode disponibilizar os arquivos estáticos onde bem quiser (como o S3). Você pode levar mais sobre isso no repositório do projeto para saber mais.
test assim como o nome diz, vai rodar a suite de testes criadas em sua aplicação utilizando Jest.
eject é o mais interessante. O time do react provavelmente são bem espertos, pois eles não querem que você fique preso em uma configuração especifica durante o desenvolvimento do seu projeto e por conta disso você pode “ejetar” a qualquer momento. Isso trás toda a parte que esta contida em react-scripts
para a raiz do seu projeto, permitindo assim que você possa configurar toda a sua aplicação como bem entender.
Contudo, eject
é uma viagem única, sendo que uma vez executado você não poderá voltar atrás.
Para ver como isso funcina, se você executar npm run eject
, seu package.json vai mudar para do código anterior para este:
e nossa estrutura de pastas agora vai ficar como estas:
O lado bom
react-create-app é ótimo para iniciantes por:
- começar um projeto React imediatamente;
- Sem configuração do webpack: uma coisa a menos para aprender no começo;
- Sem configuração do Babel: idem;
- Poucas dependencias para gerenciar.
Já suporta ES6 e algumas especificações do ES7, lint, tests, build, e até deploy para o GitHub pages todo configurado.
Todos os comandos possuem uma saida amigável que até parece uma brisa suavel para os novatos.
O lado ruim
Um projeto tão simples não vem com algumas coisas ruins também.
A peça mais intrigante para mim foram a falta dos pré-processadores CSS. Isso significa:
- Sem LESS;
- Sem Sass;
- Sem CSS Modules;
- Sem PostCSS plugins (exceto autoprefixer, que já esta incluso)
Se você quiser utilizar um algo a mais na sua aplicação, você tem que “ejetar” e então configurar você mesmo.
Então é ótimo ter esta opção, mas se você fizer isso ficará com todas as desvantagens de qualquer outros starter-kit (muitas dependências, boilerplate de configuração, sem receber atualizações do projeto).
Se você é um novato e você ejetar você pode ter um choque. Seu projeto irá de 3 dependências para 49 dependências.
Ainda assim, se você comparar o projeto ejetado com algum outro starter-kit, ainda assim é um bom começo. Ele ejeta dois arquivos de configuração para o webpack com cerca de 200 linhas cada. Isso pode soar longo, mas eles cheios de comentários explicativos, que são de acordo com um novato (eu) melhor que a documentação do Webpack pronto falei.
Conclusão
Minha recomentação é a seguinte:
Se você é um iniciante, utilize esta ferramenta. Ela vai livrar de muitas dores de cabeça. Você vai ter que escrever CSS sem um pré-processador mas vale a pena.
Lide com o fato que não á pré-processadores CSS. Construa algo legal. Faça deploy. Compartilhe com seus amigos.
Se e quando você ejetar, pense nisso como uma nova aprendizagem. Comece até algo novo para aprender o Webpack, ou pelo menos entenda os conceitos básicos de cada parte.
Se você já é avançado, create-react-app pode ser mais legal para você começar pequenos projetos. Talvez você sinta falta do seu pré-processador CSS favorito.
Mas para usuários avançados, utilizar um projeto ejetado como ponto de partida também é uma ótima opção.
Join the Conversation