javascript - Vilken React TypeScript-version ska användas i utveckling?


Jag har ett befintligt TypeScript React-projekt som skapades innan Hooks fanns i React, och jag försöker skriva om alla klasser med Hooks.

Så i min package.json "devDependencies" ändrade jag versionen av typescript react från 7.0.6 till @types/react-redux": "7.1.16". Jag hade föreställt mig att jag skulle vilja ha exakt samma version av react i "dependencies", men det verkar som att det inte finns någon 7.1.16 för react-redux, endast 7.1 och 7.2. Jag valde 7.2 och det verkar fungera.

Mer generellt undrade jag hur jag kan vara säker på att jag inte får versionsproblem om jag använder olika versioner av "react-redux" mellan utvecklings- och produktionsberoenden?

Jag undrade också om jag behöver använda "@types/react-redux" både i "devDependencies" och "dependencies" istället för bara "react-redux"?

Svar #1

Det är mycket vanligt att @types-paket inte har samma version som motsvarande ursprungliga paket. Använd bara den senaste versionen av båda och du är vanligtvis bra, eftersom @types-paket endast innehåller typdefinitioner och ingen körkod.

Eftersom du förmodligen bygger och paketerar resultatet ändå spelar det egentligen ingen roll om något är en dependency eller devDependency, den skillnaden är främst organisatorisk och har inga verkliga konsekvenser i praktiken.

Uppdatering :

Det finns två olika scenarier här där devDependencies spelar en roll:

  • du skriver ett bibliotek. I så fall, för personen som installerar det nämnda biblioteket, kommer endast dependencies att installeras och för personen som hämtar ditt källkod och kör npm install, kommer båda att installeras.
  • du har en miljö för att köra din kod och installera med npm install --production. I det fallet kommer devDependencies inte att installeras.

Eftersom du bygger en React-applikation är det dock mycket troligt att du bara någonsin kör npm install - och det installerar både beroenden och devDependencies. Eftersom båda då installeras i samma mapp på din hårddisk, är det från den punkten omöjligt att skilja dem åt, så npm start och npm run dev kommer bara att använda de paket som för närvarande är installerade.

Svar #2

phrys svar börjar med:

Det är mycket vanligt att @types-paket inte har samma version som motsvarande originalpaket.

Det behöver inte vara så: om ditt projekt finns på GitHub kan du använda Dependabot-tjänsten.

Från maj 2022:

Dependabot håller @types-beroenden synkroniserade med uppdaterade paket

Dependabot kommer nu att uppdatera @types-beroenden tillsammans med deras motsvarande paket i TypeScript-projekt.

Innan denna ändring skulle användare se separata pullförfrågningar för ett paket och dess motsvarande @types-paket.
Detta kunde leda till att paket och typdefinitioner hamnade ur synk med varandra och krävde manuell åtgärd.

Till exempel, om ett projekt hade beroenden på både jquery och @types/jquery, och en sårbarhet fick Dependabot att uppdatera jquery från 3.4.1 till 3.5.0, skulle paketet @types/jquery förbli på sin ursprungliga version 3.4.x.

Nu kan Dependabot hjälpa TypeScript-användare att hålla sina beroenden och @types-paket uppdaterade och synkroniserade.

När den utlöses för att skapa en uppdatering kommer Dependabot att kontrollera om det paketet har ett motsvarande @types-paket.

  • Om så är fallet kommer Dependabot att uppdatera både paketet och motsvarande @types-paket i en enda PR.
  • Eller, om @types-paketet inte längre behövs, kommer det beroendet istället att tas bort.

Funktionen aktiveras automatiskt på repositoryn som innehåller @types-paket i projektets devDependencies som listas i package.json.
Du kan inaktivera detta beteende genom att ange ignore-fältet i din dependabot.yml-fil till @types/*.

Om du bygger en React-applikation, med npm install som installerar både dependencies och devDependencies, bör det hjälpa.