foto af Ross Findon på Unsplash

for nylig skrev jeg et indlæg om ting, som udviklere siger, og hvad de betyder. Jeg havde det meget sjovt at skrive det og nød de kommentarer, som indlægget genererede. Der er mange flere ting, som jeg ville skrive om, og jeg planlægger at lave et opfølgningsindlæg i fremtiden med flere ting, men der var en smule lingo, som jeg følte fortjente mere end en enkelt afsnitsforklaring: Semver.

Hvad er Semver? Semver er en forkortelse for semantisk versionering. Semantisk versionsstyring er en standardiseret måde at give mening til dine programudgivelser. Det er en måde for programmelforfattere at kommunikere kortfattet til forbrugerne af deres program vigtige oplysninger, de bør vide om denne udgivelse.

Semver er repræsenteret af kun tre tal adskilt af perioder. For eksempel er den aktuelle version af lodash fra udgivelsesdatoen for dette indlæg 4.17.11, som du kan finde på deres github-eller npm-profilside. Med dette nummer kan jeg let fortælle alle de kompatibilitetsoplysninger, jeg har brug for, og kan træffe beslutninger om, om jeg skal opgradere til den seneste revision, og hvor meget arbejde der kan tage for at gøre det.

hvert nummer er et andet niveau af revision, afhængigt af hvad der blev ændret i revisionen. Læsning fra venstre for at skrive nummeret repræsenterer den aktuelle større udgivelse, den aktuelle mindre udgivelse af den aktuelle større udgivelse og den aktuelle Patch-udgivelse af den aktuelle mindre udgivelse(Major.Mindre.Patch). Ved hjælp af Lodash-eksemplet ovenfor, 4.17.11 betyder den 11.patch siden den 17. mindre udgivelse, siden den 4. store udgivelse. Når et tal øges, starter alle tal til højre tilbage ved nul.

en Patch-udgivelse bruges til at indikere, at kodeændringerne i denne revision ikke har tilføjet nye funktioner eller API-ændringer og er bagudkompatibel med den tidligere version. Det er mest typisk bruges til at betegne en fejlrettelse. Den vigtigste ting at vide er, at koden ikke har ændret den måde, den bruges på. Ved hjælp af lodash-eksemplet ovenfor, hvis en ny patch-revision sendes ud, ville versionen være 4.17.12

Minor

en mindre udgivelse bruges til at angive, at funktionalitet er blevet tilføjet, men koden er ellers bagudkompatibel. Hvis lodash-eksemplet følger med, hvis der tilføjes en ny funktion, eller en ny valgfri parameter tilføjes til en eksisterende funktion, vil versionen være 4.18.0 . Den vigtigste ting at huske er, at denne tilføjede funktionalitet er valgfri, og ved at opgradere til denne version bør ikke kræve kodeændringer fra brugerens side

Major

når du foretager ændringer i den offentlige API, og koden ikke længere er bagudkompatibel, har du foretaget “breaking” – ændringer. Dette kræver en større revisionsforøgelse. Dette kan betyde, at en funktion blev fjernet, eller at funktionaliteten er ændret, der kræver, at brugeren foretager ændringer i koden for at acceptere opdateringen. Ved hjælp af det samme eksempel ville en større udgivelse med 5.0.0

Pre-release

tingene er lidt anderledes, hvis den store version er et nul. Et nul-Versionsnummer angiver, at programmet er i hurtig udvikling og ikke har en stabil API. Dette betyder også, at hver mindre stigning kan have brudændringer. Et eksempel på dette er React Native, som i øjeblikket er på version 0.57.8 dette betyder, at for at opgradere til version 57 Fra 56 kan kræve kodeændringer og muligvis ikke være kompatibel med andre afhængigheder i projektet. Patch-opdateringer skal stadig betragtes som bagudkompatible

Hvorfor er dette vigtigt?

efter at have læst alt dette tænker du måske: “jeg har ikke planer om at udgive et bibliotek eller en npm-pakke. Hvorfor er det nyttigt at vide dette?”Først og fremmest anbefaler jeg stærkt, at du udgiver en pakke. Du lærer meget ved at gennemgå processen. For det andet, som en udvikler, der bringer disse biblioteker og pakker ind, er det vigtigt at holde dem ajour, og dette versioneringssystem hjælper med at træffe beslutninger om at opdatere dine afhængigheder, ikke bare lettere at lave, men automatiseret.

når du installerer en pakke fra npm, vil du bemærke, at din pakke.json vil blive opdateret og vil til sidst se sådan ud:

"dependencies": { "react": "^16.6.3", "react-clean-form": "^2.1.2", "react-dom": "^16.6.3", "styled-components": "^4.1.1"},

du vil bemærke, at foran hver af deres versionsnumre er en karat. Hvad dette fortæller npm (eller garn), at du vil have den seneste udgivelse, der stadig er bagudkompatibel med versionsnummeret. Hvis du ville sikre dig, at du kun fik patch-opdateringer og ikke mindre versionsopdateringer, ville du tilføje en tilde i stedet for karat som denne: "react": "~16.6.3" og endelig, hvis du bare sætter versionsnummeret ind, så får du kun den specifikke version. I bund og grund, du angiver på hvilket niveau af bagudkompatibilitet du er fortrolig med.

denne konvention giver din pakkeadministrator mulighed for at træffe smarte beslutninger for dig. Hvis jeg skulle klone ovenstående projekt og køre npm install. Jeg ville ikke få react version 16.6.3, jeg ville få version 16.7.0 i stedet. Dette skyldes, at 16.7.0 stadig er bagudkompatibel med 16.6.3, men er mere opdateret med de nyeste programrettelser og funktioner. Når du kører npm-opdatering, installerer den ikke bare den nyeste bagudkompatible version i henhold til dine regler, den støder også versionsnummeret i din pakke.Jens også. Når du kører npm-revisionsrettelse, beder dette npm om at køre npm-opdatering på de pakker, der har kendte sikkerhedsproblemer, så du kan få de nyeste programrettelser. Hvis rettelsen er i en version, der ikke passer til dine komfortregler, fortæller den dig, at du har brug for at rette den manuelt.

Semver er et kraftfuldt værktøj. Med tre tal kan forfattere kommunikere meget vigtig information til forbrugerne af deres programmer. Dette giver os som forbrugere mulighed for at automatisere den kedelige opgave at holde vores program opdateret i henhold til vores komfortniveau og bruge mere tid og de opgaver, vi elsker at udføre: at skrive fantastisk kode, der løser problemer. For en mere komplet forklaring af semver, vil jeg anbefale at tjekke ud semver.org

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.