Semantic Versioning (Version ruleset in package.json (^,~,>,>=,<,<=,=,-,||))

Mucahid Yazar
2 min readJul 23, 2021

Node.js packageslerinde en güzel şey kesinlikle packageler için version numaralandırma sürümlerinde semantic versioning kullanmaları diyebiliriz.

Semantic Versioning konsepti oldukça basittir. Bütün version sadece 3 digit yani sayıdan oluşur: x.y.z.

  • İlk sayı yani x, major version
  • İkinci sayı yani y, minor version
  • Üçüncü sayı yani z, patch version

Yeni bir sürüm çıkmak istediğinizde istediğiniz gibi bir sayıyı arttırmazsınız. Bazı kurallar dahilinde bu sayıları arttırırız.

  • API’da eskiye göre uyumsuz önemli değişikliklerde MAJOR versionu arttırırız
  • Geriye dönük uyumlu bir şekilde çıkarttığımız yeni özellik ve functionalitylerde MINOR versionu arttırırız
  • Geriye dönük uyumlu bir şekilde bug fixlerde veya küçük düzeltmelerde veya typolarda PATCH versionu arttırırız

The convention is adopted all across programming languages, and it is very important that every npm package adheres to it, because the whole system depends on that.

Bu yapı bütün proğramlanma dillerinde bu şekilde benimsenmiştir. Ve npm packagelerininde bu kurallara bağlı kalması hem bizim hem de sistem için çok önemlidir. Çünkü bütün sistem ucunda buna bağlıdır.

Why is that so important?

Çünkünpm bazı kurallar ayarlar ve biz bu kurallara göre package versionlarını ayarlarız uygulamamızınpackage.json içinde. Ve bu packagelerimize bazı ruleslar ekleriz package.json içinde. Bu rullara göre npm update yaptığımızda düzgünce yüklemelerimizi gerçekleştiririz.

The rules use those symbols:

  • ^
  • ~
  • >
  • >=
  • <
  • <=
  • =
  • -
  • ||

Let’s see those rules in detail:

  • ^: Eğer version number olarak bir packageye ^0.13.0 yazarsanız npm update yaptığımızda eğer bu packagenin yeni minor veya patch releasesi (0.13.1, 0.14.0gibi) paylaşılmışsa bu paylaşılan yeni versionları yükler, eğer yoksa yazılmış versionu yükler.
  • ~: Eğer version number olarak bir packageye ~0.13.0 yazarsanız npm update yaptığımızda eğer bu packagenin yeni patch releasesi (0.13.1 gibi) paylaşılmışsa bu paylaşılan yeni versionları yükler, eğer yoksa yazılmış versionu yükler.
  • >: Herhangi bir yüksek versionu kabul eder.
  • >=: Herhangi bir yüksek veya eşit versionu kabul eder
  • <=: Herhangi bir düşük veya eşit versionu kabul eder
  • <: Herhangi bir düşük versionu kabul eder.
  • =: Tam olarak belirttiğimiz versionu kabul eder
  • -: Belirlik bir aralıkta ki versionu kabul eder. Example: 2.1.0 - 2.6.2
  • ||: Birden fazla rule set ederiz pipelarla. Example: < 2.1 || > 2.6

Yukarıdaki formuüllerden bir kaçını kullanarak kendinize özeli kurallarda ayarlayabilirziniz, for example use 1.0.0 || >=1.1.0 <1.2.0 to either use 1.0.0 or one release from 1.1.0 up, but lower than 1.2.0.

Başka kurallarda var:

  • no symbol: Her hangi bir işaret koymazsak sadece belirttiğimiz versionu yüklemesini istediğimizi söyleriz. Bir nevi = işareti gibi. (1.2.1)
  • latest: packagenin latest yani en son sürümü hangisi ise onu kullanmak istediğimizi söyleriz.

--

--