avatar
·5 dk okuma
Versiyonlama: Node.js'de Sürüm Yönetimi

Versiyonlama: Node.js'de Sürüm Yönetimi

Yazılım geliştirme süreçlerinde versiyonlama, projelerin sürdürülebilirliği ve güncellemelerin izlenebilirliği açısından hayati bir öneme sahiptir. Bu makalede, Node.js projelerinde kullanılan versiyonlama yöntemleri ve özellikle Semantic Versioning (Anlamsal Versiyonlama) hakkında detaylı bilgiler sunacağız.

Versiyonlama Nedir?

Versiyonlama, bir yazılımın farklı sürümlerini takip etmek ve bu sürümler arasında yapılan değişiklikleri izlemek için kullanılan bir sistemdir. Versiyonlama sayesinde geliştiriciler, hangi sürümde ne tür değişiklikler yapıldığını ve bu değişikliklerin projenin genel işleyişini nasıl etkilediğini kolayca takip edebilir.

npm install Komutu ve Varsayılan Davranışı

Node.js projelerinde kullanılan npm install komutu, paketlerin kurulumu sırasında en sık başvurulan yöntemlerden biridir. Bu komut, bağımlılıkların (dependencies) projemize eklenmesini sağlar.

  • Varsayılan Kurulum: npm install komutu çalıştırıldığında, ilgili paketin en son kararlı sürümü kurulur. Örneğin, "moment" paketi için bu sürüm 2.29.1 olabilir.

  • Belirli Bir Versiyonun Kurulumu: Ancak, bazen belirli bir sürümü kurmak gerekebilir. Bu durumda, npm install package_name@version_number komutu kullanılır. Örneğin, npm install [email protected] komutu ile "moment" paketinin 2.24.0 sürümü kurulabilir.

Belirli Bir Versiyonun Kurulumu

Bazen en son sürümde bir hata olabilir veya yeni sürümde bazı uyumsuzluklar yaşanabilir. Bu gibi durumlarda, daha stabil veya bilinen bir sürümü kullanmak mantıklıdır.

  • Eski Sürüme Geçiş: Yeni sürümde bir hata bulunduğunda, eski bir sürümün kurulması gerekebilir. Bu durumda, belirtilen versiyon numarası ile kurulum yapılır ve sorun çözülene kadar bu sürüm kullanılabilir.

  • Güncelleme Yapmak: Sorun düzeltildiğinde veya yeni bir güncelleme yapıldığında, npm install package_name komutu ile paketin en son sürümü tekrar kurulabilir.

Semantic Versioning (Anlamsal Versiyonlama)

Anlamsal Versiyonlama, yazılım dünyasında en yaygın olarak kullanılan versiyonlama sistemlerinden biridir. Bu sistem, versiyon numaralarının belirli kurallar çerçevesinde atanmasını ve artırılmasını sağlar. Versiyon numaraları, yazılımın geçirdiği değişiklikleri ve bu değişikliklerin doğasını anlamayı kolaylaştırır.

versiyonlama
Semantic Versioning'in Temel Kuralları

Semantic Versioning (SemVer) sistemi, versiyon numaralarını üç ana bileşen üzerinden tanımlar: major.minor.patch.

  • Major (Ana) Versiyon: Geriye dönük uyumsuz değişiklikler yapıldığında artırılır. Örneğin, 1.x.x'den 2.0.0'a.

  • Minor (Alt) Versiyon: Geriye dönük uyumlu yeni özellikler eklendiğinde artırılır. Örneğin, 1.1.x'den 1.2.0'a.

  • Patch (Yama) Versiyon: Geriye dönük uyumlu hata düzeltmeleri yapıldığında artırılır. Örneğin, 1.1.1'den 1.1.2'ye.

Versiyon Numaralarının Artırılma Kuralları

Versiyon numaraları, yapılan değişikliklerin doğasına göre artırılır:

  • Patch Artırma: Hata düzeltmeleri yapıldığında ve kod geriye dönük uyumlu kaldığında artırılır. Örneğin, 1.1.1'den 1.1.2'ye.

  • Minor Artırma: Yeni işlevler eklendiğinde ve kod geriye dönük uyumlu kaldığında artırılır. Bu durumda, patch versiyonu sıfırlanır. Örneğin, 1.1.1'den 1.2.0'a.

  • Major Artırma: Kod geriye dönük uyumsuz değişiklikler içerdiğinde artırılır. Bu durumda, minor ve patch versiyonları sıfırlanır. Örneğin, 1.1.1'den 2.0.0'a.

Ek Bilgiler

Semantic Versioning, her zaman 0.1.0 ile başlar. Yeni bir pakette, yama numarası ile başlanmaz. Major versiyon 0, başlangıç geliştirme aşamasını temsil eder ve kod üretim için hazır hale geldiğinde, versiyon 1.0.0'a yükseltilir. En küçük değişiklik bile versiyon numarasında bir artış ile yapılmalıdır.

Versiyon Numaralarının Artırılma Kuralları - Bir Paket Örneği Üzerinden

Bu örnekte, yeni bir Node.js paketi oluşturduğumuzu ve bu paketin versiyon numaralarını nasıl artıracağımızı adım adım inceleyeceğiz. Paketimiz, basit bir matematik kütüphanesi olsun ve adını simple-math olarak belirleyelim.

0.1.0 Başlangıcı

Paket: simple-math

  • Bu versiyonda, sadece toplama ve çıkarma fonksiyonları mevcut ve paket hala geliştirme aşamasında.

Kod:

// index.js
module.exports.add = (a, b) => a + b;
module.exports.subtract = (a, b) => a - b;

package.json:

{
  "name": "simple-math",
  "version": "0.1.0",
  "description": "A simple math library",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Patch Artırma (Hata Düzeltmeleri)

Durum:

Toplama fonksiyonunda bir hata bulundu. Hata düzeltildi ve kod geriye dönük uyumlu kaldı.

Kod:

// index.js
module.exports.add = (a, b) => {
  if (typeof a !== 'number' || typeof b !== 'number') {
    throw new Error('Arguments must be numbers');
  }
  return a + b;
};
module.exports.subtract = (a, b) => a - b;

package.json:

  • Eski versiyon: 0.1.0

  • Yeni versiyon: 0.1.1

{
  "name": "simple-math",
  "version": "0.1.1",
  "description": "A simple math library",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Minor Artırma (Yeni İşlevler Ekleme)

Durum:

Paketimize çarpma ve bölme fonksiyonları eklendi. Bu yeni işlevler, mevcut kodu değiştirmedi ve geriye dönük uyumlu.

Kod:

// index.js
module.exports.add = (a, b) => {
  if (typeof a !== 'number' || typeof b !== 'number') {
    throw new Error('Arguments must be numbers');
  }
  return a + b;
};
module.exports.subtract = (a, b) => a - b;
module.exports.multiply = (a, b) => a * b;
module.exports.divide = (a, b) => {
  if (b === 0) {
    throw new Error('Division by zero');
  }
  return a / b;
};

package.json:

  • Eski versiyon: 0.1.1

  • Yeni versiyon: 0.2.0

{
  "name": "simple-math",
  "version": "0.2.0",
  "description": "A simple math library",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Major Artırma (Üretime Hazır Hale Gelme)

Durum:

Toplama ve çıkarma fonksiyonlarının isimlerini değiştirdik (add -> sum, subtract -> difference). Bu değişiklik, mevcut kullanıcı kodunu bozacak (geriye dönük uyumsuz). Paket artık kararlı ve üretime hazır. Fonksiyon isimleri değiştirildi ve ek özellikler eklendi.

Kod:

// index.js
module.exports.sum = (a, b) => {
  if (typeof a !== 'number' || typeof b !== 'number') {
    throw new Error('Arguments must be numbers');
  }
  return a + b;
};
module.exports.difference = (a, b) => a - b;
module.exports.multiply = (a, b) => a * b;
module.exports.divide = (a, b) => {
  if (b === 0) {
    throw new Error('Division by zero');
  }
  return a / b;
};

package.json:

  • Eski versiyon: 0.2.0

  • Yeni versiyon: 1.0.0

{
  "name": "simple-math",
  "version": "1.0.0",
  "description": "A simple math library",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Özet

  1. Başlangıç (0.1.0): Temel toplama ve çıkarma fonksiyonları ile paket oluşturuldu.

  2. Patch Artırma (0.1.1): Hata düzeltildi ve kod geriye dönük uyumlu kaldı.

  3. Minor Artırma (0.2.0): Çarpma ve bölme fonksiyonları eklendi ve kod geriye dönük uyumlu kaldı.

  4. Major Artırma (1.0.0): Paket üretime hazır hale geldi, fonksiyon isimleri değiştirildi ve ek özellikler eklendi.

Bu süreç, semantik versiyonlamanın kurallarını ve paketinizin gelişimine göre versiyon numaralarının nasıl değiştiğini gösterir. Versiyon numaralarının bu şekilde yönetilmesi, kullanıcıların paketinizdeki değişiklikleri ve güncellemeleri daha iyi anlamalarını sağlar.

Sorumluluklar

Semantic Versioning sistemi, hem geliştiricilere hem de kullanıcılara belirli sorumluluklar yükler:

  • Geliştiriciler: Yaptıkları değişikliklere uygun versiyon numaralarını güncellemelidir.

  • Kullanıcılar: Güncellemeleri takip etmeli ve projelerinde gerekli düzeltmeleri yapmalıdır.

Sonuç

Versiyonlama, yazılım projelerinde kritik bir rol oynar. Semantic Versioning sayesinde, yazılım paketlerinin versiyon numaraları belirli kurallar çerçevesinde atanır ve bu, yazılımın hangi değişikliklerden geçtiğini ve bu değişikliklerin etkilerini anlamayı kolaylaştırır. Geliştiricilerin ve kullanıcıların bu sisteme uygun hareket etmeleri, projelerin sürdürülebilirliği açısından büyük önem taşır.

Bu makale, versiyonlama sistemlerinin ne anlama geldiğini, nasıl doğru bir şekilde uygulanması gerektiğini ve projelere olan etkilerini anlamanıza yardımcı olmayı amaçlamaktadır.