In questo articolo
Cos'e il Semantic Versioning?
Il Versionamento Semantico (SemVer) è uno schema di versionamento che assegna un significato a ogni parte di un numero di versione. Creato da Tom Preston-Werner, SemVer fornisce una convenzione universale per comunicare la natura e l'impatto delle modifiche software solo attraverso i numeri di versione.
Seguendo SemVer, sviluppatori e utenti possono capire istantaneamente se un aggiornamento introduce modifiche incompatibili, nuove funzionalità o correzioni di bug — semplicemente leggendo il numero di versione. Questa prevedibilità è cruciale per la gestione delle dipendenze nei moderni ecosistemi software.
Il formato SemVer
Una versione semantica è composta da tre componenti numerici separati da punti: MAJOR.MINOR.PATCH.
- MAJOR — incrementato quando si apportano modifiche API incompatibili. Passare da 1.x.x a 2.0.0 segnala che il codice esistente potrebbe non funzionare
- MINOR — incrementato quando si aggiunge funzionalità in modo compatibile con le versioni precedenti. Passare da 1.2.x a 1.3.0 significa nuove funzionalità senza rompere quelle esistenti
- PATCH — incrementato quando si apportano correzioni di bug compatibili con le versioni precedenti. Passare da 1.2.3 a 1.2.4 significa che sono stati corretti solo dei bug
- Ogni componente deve essere un numero intero non negativo e non deve contenere zeri iniziali (1.02.3 non è valido)
Prova gratuitamente — nessuna registrazione richiesta
Valida una stringa SemVer →Intervalli di versione
I gestori di pacchetti usano gli intervalli di versione per specificare le versioni delle dipendenze compatibili. La comprensione di questi intervalli è essenziale per build affidabili.
- Intervalli con accento circonflesso (^1.2.3) — consentono modifiche che non cambiano la cifra non zero più a sinistra. ^1.2.3 significa qualsiasi versione da 1.2.3 fino a ma non inclusa 2.0.0
- Intervalli con tilde (~1.2.3) — consentono solo modifiche a livello di patch. ~1.2.3 significa qualsiasi versione da 1.2.3 fino a ma non inclusa 1.3.0
- Versione esatta (1.2.3) — è accettabile solo quella versione specifica, nessuna flessibilità
Casi d'uso
Il versionamento semantico è la base della gestione moderna dei pacchetti e dei flussi di lavoro di rilascio.
- npm, pip e Cargo — i gestori di pacchetti si affidano a SemVer per risolvere gli alberi delle dipendenze e impedire che le modifiche incompatibili raggiungano la produzione
- Pipeline CI/CD — i sistemi automatizzati usano i tag SemVer per attivare le build, pubblicare i rilasci e generare i changelog
- Versionamento delle API — le API REST usano versioni principali negli URL (v1, v2) per mantenere la compatibilità con le versioni precedenti durante l'evoluzione
- Autori di librerie — pubblicare una libreria con SemVer corretto segnala ai consumatori quando gli aggiornamenti sono sicuri
Pre-release e metadati
SemVer supporta due estensioni opzionali che aggiungono contesto ai numeri di versione senza influenzare le regole di precedenza.
- Identificatori di pre-release — aggiunti dopo un trattino: 1.0.0-alpha, 1.0.0-beta.2, 1.0.0-rc.1. Indicano versioni non ancora stabili e hanno una precedenza inferiore rispetto al rilascio associato
- Metadati di build — aggiunti dopo un segno più: 1.0.0+build.123, 1.0.0-beta+exp.sha.5114f85. I metadati di build vengono ignorati quando si determina la precedenza della versione
- Le versioni pre-release vengono ordinate usando identificatori separati da punti: gli identificatori numerici vengono ordinati numericamente, quelli alfanumerici in modo lessicale
FAQ
La versione 0.x.x è trattata diversamente da 1.x.x?
Sì. In SemVer, la versione 0.x.x indica lo sviluppo iniziale dove qualsiasi cosa può cambiare in qualsiasi momento. L'API pubblica non deve essere considerata stabile. Una volta rilasciata la versione 1.0.0, ci si impegna a seguire le regole SemVer per tutti i rilasci successivi.
Posso usare v come prefisso (v1.2.3)?
La specifica SemVer non include un prefisso v — il formato canonico è 1.2.3. Tuttavia, molti strumenti (tag Git, release GitHub) usano convenzionalmente v1.2.3. La maggior parte dei validatori accetta entrambe le forme.
Cosa succede se mi dimentico di incrementare la versione principale per una modifica incompatibile?
I consumatori che usano gli intervalli con accento circonflesso riceveranno automaticamente l'aggiornamento e le loro build potrebbero rompersi inaspettatamente. Ecco perché la disciplina SemVer è fondamentale — è un contratto sociale tra gli autori delle librerie e i consumatori.