Create React App 2.0: Babel 7, Sass e Mais

01 de outubro de 2018 por Joe Haddad and Dan Abramov

Create React App 2.0 foi lançado hoje e traz o equivalente a um ano de melhorias numa única atualização de dependência.

Apesar do React por si só não precisar de nenhuma dependência para o build, pode ser desafiador escrever um aplicativo complexo sem um test runner rápido, um minificador para produção e um código fonte modular. Desde do primeiro lançamento, o objetivo do Create React App tem sido ajudar você a focar no que é mais importante — o código da sua aplicação — e cuidar da configuração do build e dos testes para você.

Várias ferramentas das quais ele depende já lançaram novas versões contendo novos recursos e melhorias de desempenho: Babel 7, webpack 4 e Jest 23. Entretanto, atualizá-las manualmente e fazer com que elas trabalhem bem juntas requer muitos esforços. E é justamente nisso que os contribuidores do Create React App tem se mantido ocupados nos últimos meses: migrando a configuração e dependências para que você não precise fazer sozinho.

Agora que Create React App 2.0 não está mais em beta, vamos ver o que há de novo e como podemos testá-lo!

Nota

Não se sinta pressionado a atualizar nada. Se você está satisfeito com as funcionalidades atuais, o desempenho e a confiabilidade, você pode continuar usando a versão em que você está atualmente! Pode ser uma boa ideia deixar o lançamento 2.0 se estabilizar um pouco antes de alterá-lo em produção.

Novidades

Aqui está um pequeno resumo das novidades nesse lançamento:

Todas essas funcionalidades estão disponíveis por padrão — para ativá-las, siga as instruções abaixo.

Começando um Projeto com Create React App 2.0

Você não precisar atualizar nada. A partir de hoje, quando você executar create-react-app, ele usará a versão 2.0 do modelo por padrão. Divirta-se!

Se você quer usar o modelo antigo 1.x por alguma razão, você pode fazer isso adicionando o argumento --scripts-version=react-scripts@1.x ao comando create-react-app.

Atualizando um Projeto para o Create React App 2.0

Atualizar um projeto não ejetado para Create React App 2.0 deve ocorrer sem complicações. Abra o package.json na raiz do seu projeto e encontre o react-scripts nele.

Agora altere a versão dele para 2.0.3:

  // ... other dependencies ...
  "react-scripts": "2.0.3"

Execute npm install (ou yarn, se for seu caso). Para a maioria dos projetos, essa mudança de uma única linha é suficiente para atualizar!

Mais algumas dicas para ajudar você.

Quando você executar npm start pela primeira vez depois da atualização, será perguntado quais navegadores você gostaria de suportar. Pressione y para aceitar os padrões. Ele serão escritos no seu package.json e você pode editá-los a qualquer momento. Create React App usará essa informação para produzir bundles CSS menores ou adicionar polyfills de acordo com sua opção de suportar navegadores modernos ou antigos.

Se npm start ainda assim não funcionar depois da atualização, veja as instruções de migração detalhadas nas notas de lançamento. De fato, algumas mudanças radicais nesse lançamento que podem quebrar seu código (breaking changes), mas o escopo delas são limitadas, então elas não devem tomar mais do que algumas horas para resolver. Veja que o suporte para navegadores antigos agora é opcional para reduzir o tamanho de polyfills.

Se você ejetou anteriormente, mas agora quer atualizar, uma solução comum é encontrar os commits onde você ejetou (e qualquer commit subsequence que altere a configuração), revertê-los, atualizar e depois talvez ejetar novamente. Também é possível que a funcionalidade pela qual você precisou ejetar (talvez Sass ou CSS Modules?), agora seja suportada por padrão.

Nota

Devido a um possível erro no npm, você pode acabar vendo avisos sobre dependências peer não satisfeitas. Você deve poder ignorá-las. Pelo que sabemos, esse problema não está presente com Yarn.

Mudanças Radicais (Breaking Changes)

Aqui está uma lista de mudanças neste lançamento que podem quebrar suas aplicações.

  • Node 6 não é mais suportado.
  • Suporte para navegadores antigos (como do IE 9 até IE 11) agora é opcional em um pacote separado.
  • Agora a divisão de código (code-splitting) utilizando import() se comporta mais semelhante à especificação, enquanto que require.ensure() foi desativado.
  • O ambiente padrão do Jest agora inclui jsdom.
  • Suporte para especificar um objeto como configuração de proxy foi substituído pelo suporte para módulo proxy customizado.
  • Suporte para extensão .mjs foi removido até que seu ecossistema se estabilize.
  • Definições de PropTypes são automaticamente removidas na compilação em ambiente de produção.

Se algum desses pontos afeta você, as notas de lançamento 2.0.3 tem mais instruções detalhadas.

Saiba Mais

Você pode encontrar todo histórico de mudanças nas notas de lançamento. Esse foi um lançamento grande e podemos ter esquecido de algo. Por favor, reporte qualquer problema para nosso rastreador de issues e vamos tentar ajudar.

Nota

Se você está usando versões alpha 2.x, temos instruções de migração diferentes para elas.

Agradecimento

Esse lançamento não seria possível sem a maravilhosa comunidade de contribuidores. Gostaríamos de agradecer a Andreas Cederström, Clement Hoang, Brian Ng, Kent C. Dodds, Ade Viankakrisna Fadlil, Andrey Sitnik, Ro Savage, Fabiano Brito, Ian Sutherland, Pete Nykänen, Jeffrey Posnick, Jack Zhao, Tobias Koppers, Henry Zhu, Maël Nison, XiaoYan Li, Marko Trebizan, Marek Suscak, Mikhail Osher e vários outros que testaram e ofereceram feedback para esse lançamento.