Create React App må endre seg, og skaperen ser for seg fem muligheter

Dan Abramov sier at Create React App kan ende opp som en launcher.

Dan Abramov har skissert fem mulige veier videre for Create React App. 📸: Kurt Lekanger
Dan Abramov har skissert fem mulige veier videre for Create React App. 📸: Kurt Lekanger Vis mer

I den offisielle React-dokumentasjonen anbefales fortsatt Create React App (CRA) for nybegynnere som raskt vil komme igang med et nytt React-prosjekt.

CRA begynner imidlertid å dra på årene, og nylig sendte den kjente YouTube-utvikleren Theo Brown inn en pull request for å få fjernet CRA-anbefalingen fra React-dokumentasjonen.

Theos forslag om å heller anbefale å bruke Vite skapte voldsom debatt.

Nå har selveste Dan Abramov, som jobber på React-teamet og i sin tid lagde Create Reac App, postet et langt svar der han forteller om React-teamets planer for CRA.

Hvorfor Create React App finnes

Dan Abramov skriver at da CRA ble lansert i 2016, var det komplisert å sette opp alle de ulike verktøyene du trengte og få dem til å fungere sammen før du kunne begynne å lage React-appen din.

«Målet med Create React App var å tilby den beste måten å starte en ny React web-app for majoriteten av React-brukere.»

CRA løste dette ved å kombinere alle de nødvendige verktøyene i én pakke, ferdig konfigurert slik at det skulle være raskt og enkelt å komme igang.

"Målet med Create React App var å tilby den beste måten å starte en ny React web-app for majoriteten av React-brukere", skriver Abramov.

Han skriver videre at det å ha et slikt ferdig oppsett fortsatt er verdifullt for React-økosystemet. For eksempel kunne React-teamet legge til linting-regler for React hooks til standardoppsettet i CRA da Hooks kom ut.

"Det ville vært vanskelig å rulle ut slike endringer så bredt hvis det ikke fantes en populær mal som ble vedlikeholdt av React-teamet", skriver Abramov.

Mange problemer med CRA

Mange som ønsker noe annet enn CRA peker på at CRA er tregere enn andre alternativer som for eksempel React-apper laget med verktøy som Vite. Abramov sier de i prinsippet kunne fikset dette, for eksempel ved å bruke et raskere byggeverktøy – eller kanskje anbefale å bytte til Vite, slik Theo Brown foreslo.

Abramov mener imidlertid det er mange andre problemer med CRA som dette ikke ville løst. CRA oppretter apper som er utelukkende klientside-apper. Selv om CRA gir en god utvikleropplevelse er det ikke godt nok for de som ville ta i bruk muligheter som statisk sidegenerering (SSG) eller serverside-rendring (SSR) for å skape bedre brukeropplevelser.

«Det å lage en ny CRA som tilfredsstiller alle behov har blitt vanskelig.»

Utviklere bygger React-applikasjoner på mange flere ulike måter nå enn da CRA var nytt. Noen lager løsninger som ikke er 100 % React, og de siste årene har vi også fått et stort antall React-baserte rammeverk som kompliserer bildet ganske mye. Det å lage en ny CRA som tilfredsstiller alle behov har blitt vanskelig.

Vi skal ikke gå inn på alle innvendingene til Abramov her, men anbefaler å ta en kikk selv, han har mange gode argumenter og mye bra innsikt.

Fem alternative veier for CRA

Abramov sier man bør tenke på React som et bibliotek som tilbyr en del API-er som gjør det mulig å definere og sette sammen komponenter. I tillegg er React en arkitektur som gir byggeklossene som trengs for å lage rammeverk.

«Mange av de nye mulighetene som har kommet i React i det siste er først og fremst laget for de som lager rammeverk.»

Du kan bruke React uten et rammeverk, men React-teamet ønsker at hvis du bruker et rammeverk så skal rammeverket kunne være i stand til å utnytte alle mulighetene i React.

Mange av de nye mulighetene som har kommet i React i det siste er først og fremst laget for de som lager rammeverk.Det at det finnes mange React-rammeverk er bra, skriver Abramov.

Det å lage en ny CRA som tilfredsstiller alle behov har blitt vanskelig, men Dan Abramov skisserer fem mulige veier videre for Create React App:

  1. Lage et nytt rammeverk fra bunnen av. Prøve å gjenskape CRA som et rammeverk som integrerer datahenting, ruting, bundling, samt SSG/SSR. Å lage et nytt rammeverk som konkurrerer med andre og som er offisielt anbefalt, uten egentlig å ha brukere, mener Abramov ikke er noen god løsning.
  2. Avvikle Create React App og heller vedlikeholde en Vite-mal. For å oppnå alle målene måtte dette være en veldig sofistikert mal, faktisk like avansert som et React-rammeverk. Heller ingen god løsning.
  3. Avvikle Create React App og foreslå React-rammeverk. Ulempen er at man ikke lenger foreslår en nøytral og uavhengig måte å opprette en React-app på fra kommandolinjen. Det å avvikle ("deprecate") CRA helt vil også være forvirrende fra et merkevareperspektiv ("hvorfor er det å opprette en React-app deprecated?")
  4. La Create React App bruke ett bestemt rammeverk. Plukke ut ett rammeverk og endre CRA til å lage nye apper med dette rammeverket som standard. Dette vil imidlertid gjøre det vanskelig for andre rammeverk å konkurrere.
  5. Gjøre Create React App til en "launcher". Beholde Create React App som en kommando du kjører fra kommandolinjen, men gjøre det til en launcher som gir deg en liste over anbefalte rammeverk. I tillegg vil det være et "classic"-valg som gir deg en ren klientside-app slik som CRA gjør nå – men kanskje med Vite "under panseret".
«Å endre CRA til en launcher kommuniserer et skifte i hva vi mener er best for de fleste nye web-apper.»

Abramov skriver at React-teamet antagelig foretrekker nummer 5 på listen – gjøre CRA til en launcher.

"Det opprinnelige målet med CRA var å tilby den beste måten å starte en ny React web-app på for flesteparten av React-brukerne. Vi liker at det å endre CRA til en launcher eksplisitt kommuniserer et skifte i hva vi mener er best for de fleste nye web-apper, og samtidig beholder muligheten for de som vil gjøre ting på gamlemåten", skriver Abramov.

React-teamet jobber nå med en mer detaljert RFC ("request for comments") som vil bli publisert senere.