Bazel Kilit Dosyası

Sorun bildirme Kaynağı görüntüleme Nightly · 8.0 . 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bazel'deki kilit dosyası özelliği, bir projenin ihtiyaç duyduğu yazılım kitaplıklarının veya paketlerinin belirli sürümlerinin ya da bağımlılıklarının kaydedilmesini sağlar. Bunu, modül çözümleme ve uzantı değerlendirmesinin sonucunu saklayarak yapar. Kilit dosyası, tutarlı geliştirme ortamları sağlayarak yeniden üretilebilir derlemeleri destekler. Ayrıca, proje bağımlılıklarında değişiklik olmadığında Bazel'in çözüm sürecini atlamasına izin vererek derleme verimliliğini artırır. Ayrıca kilit dosyası, harici kitaplıklarda beklenmedik güncellemeleri veya bozucu değişiklikleri önleyerek kararlılığı artırır ve böylece hata ekleme riskini azaltır.

Kilit dosyası oluşturma

Kilit dosyası, çalışma alanı kökü altında MODULE.bazel.lock adıyla oluşturulur. Derleme işlemi sırasında, özellikle modül çözümlemesi ve uzantı değerlendirmesinden sonra oluşturulur veya güncellenir. Kilit dosyası, MODULE dosyası, işaretler, geçersiz kılma işlemleri ve diğer ilgili bilgiler de dahil olmak üzere projenin mevcut durumunu yakalar. Önemli bir nokta, yalnızca derlemenin mevcut çağrısına dahil edilen bağımlılıkları içermesidir.

Projede bağımlılıkları etkileyen değişiklikler olduğunda kilit dosyası yeni durumu yansıtacak şekilde otomatik olarak güncellenir. Bu sayede kilit dosyası, mevcut derleme için gereken belirli bağımlılık grubuna odaklanmaya devam eder ve projenin çözülmüş bağımlılıklarının doğru bir temsilini sağlar.

Kilit Dosyası Kullanımı

Proje durumu kilit dosyasından farklı olduğunda Bazel'in davranışını özelleştirmek için kilit dosyası --lockfile_mode işaretiyle kontrol edilebilir. Kullanılabilen modlar şunlardır:

  • update (Varsayılan): Proje durumu kilit dosyasıyla eşleşirse çözüm sonucu kilit dosyasından hemen döndürülür. Aksi takdirde çözüm uygulanır ve kilit dosyası mevcut durumu yansıtacak şekilde güncellenir.
  • error: Proje durumu kilit dosyasıyla eşleşirse çözüm sonucu kilit dosyasından döndürülür. Aksi takdirde Bazel, proje ile kilit dosyası arasındaki farklılıkları belirten bir hata verir. Bu mod, özellikle projenizin bağımlılıklarının değişmediğinden ve farklılıkların hata olarak değerlendirildiğinden emin olmak istediğinizde yararlıdır.
  • off: Kilit dosyası hiç kontrol edilmez.

Kilit dosyası avantajları

Kilit dosyası çeşitli avantajlar sunar ve çeşitli şekillerde kullanılabilir:

  • Yeniden oluşturulabilir derlemeler. Kilit dosyası, yazılım kitaplıklarının belirli sürümlerini veya bağımlılıklarını yakalayarak derlemelerin farklı ortamlarda ve zaman içinde yeniden üretilebilir olmasını sağlar. Geliştiriciler, projelerini oluştururken tutarlı ve tahmin edilebilir sonuçlara güvenebilir.

  • Etkili çözünürlük atlama. Kilit dosyası, son derlemeden bu yana proje bağımlılıklarında değişiklik yoksa Bazel'in çözüm sürecini atlamasını sağlar. Bu, özellikle çözümün zaman alabileceği senaryolarda derleme verimliliğini önemli ölçüde artırır.

  • Kararlılık ve risk azaltma. Kilit dosyası, harici kitaplıklarda beklenmedik güncellemeleri veya bozucu değişiklikleri önleyerek kararlılığı korumaya yardımcı olur. Bağımlılıkları belirli sürümlere kilitleyerek uyumsuz veya test edilmemiş güncellemeler nedeniyle hata oluşma riski azaltılır.

Kilit dosyası içeriği

Kilit dosyası, proje durumunun değişip değişmediğini belirlemek için gerekli tüm bilgileri içerir. Ayrıca, projenin mevcut durumda oluşturulmasının sonucunu da içerir. Kilit dosyası iki ana bölümden oluşur:

  1. Modül çözünürlüğünün girişleri (ör. moduleFileHash, flags ve localOverrideHashes) ve çözünürlüğün çıkışı (moduleDepGraph).
  2. Her modül uzantısı için kilit dosyası, transitiveDigest ile temsil edilen ve uzantıyı etkileyen girişleri ve generatedRepoSpecs olarak adlandırılan uzantının çalıştırılmasının çıktısını içerir.

Aşağıda, kilit dosyasının yapısını gösteren ve her bölümle ilgili açıklamaların yer aldığı bir örnek verilmiştir:

{
  "lockFileVersion": 1,
  "moduleFileHash": "b0f47b98a67ee15f9.......8dff8721c66b721e370",
  "flags": {
    "cmdRegistries": [
      "https://bcr.bazel.build/"
    ],
    "cmdModuleOverrides": {},
    "allowedYankedVersions": [],
    "envVarAllowedYankedVersions": "",
    "ignoreDevDependency": false,
    "directDependenciesMode": "WARNING",
    "compatibilityMode": "ERROR"
  },
  "localOverrideHashes": {
    "bazel_tools": "b5ae1fa37632140aff8.......15c6fe84a1231d6af9"
  },
  "moduleDepGraph": {
    "<root>": {
      "name": "",
      "version": "",
      "executionPlatformsToRegister": [],
      "toolchainsToRegister": [],
      "extensionUsages": [
        {
          "extensionBzlFile": "extension.bzl",
          "extensionName": "lockfile_ext"
        }
      ],
      ...
    }
  },
  "moduleExtensions": {
    "//:extension.bzl%lockfile_ext": {
      "transitiveDigest": "oWDzxG/aLnyY6Ubrfy....+Jp6maQvEPxn0pBM=",
      "generatedRepoSpecs": {
        "hello": {
          "bzlFile": "@@//:extension.bzl",
          ...
        }
      }
    }
  }
}

Modül Dosyası Karması

moduleFileHash, MODULE.bazel dosya içeriğinin karma değerini temsil eder. Bu dosyada herhangi bir değişiklik olursa karma değeri farklı olur.

Bayraklar

Flags nesnesi, çözüm sonucunu etkileyebilecek tüm işaretleri depolar.

Yerel Geçersiz Kılma Karmaları

Kök modül local_path_overrides içeriyorsa bu bölüm, MODULE.bazel dosyasının karmasını yerel depoda depolar. Bu bağımlılıktaki değişikliklerin izlenmesine olanak tanır.

Modül Bağımlılığı Grafiği

moduleDepGraph, yukarıda belirtilen girişlerin kullanıldığı çözüm sürecinin sonucunu temsil eder. Projenin çalışması için gereken tüm modüllerin bağımlılığı grafiğini oluşturur.

Modül Uzantıları

moduleExtensions bölümü, yalnızca mevcut çağrıda kullanılan veya daha önce çağrılan uzantıları içeren ve artık kullanılmayan uzantıları hariç tutan bir haritadır. Diğer bir deyişle, bağımlılık grafiğinde artık kullanılmayan uzantılar moduleExtensions haritasından kaldırılır.

Bu haritadaki her giriş, kullanılan bir uzantıya karşılık gelir ve içeren dosyası ve adıyla tanımlanır. Her girişin karşılık gelen değeri, ilgili uzantıyla ilişkili bilgileri içerir:

  1. transitiveDigest, uzantı uygulamasının ve geçişli .bzl dosyalarının özetidir.
  2. generatedRepoSpecs, söz konusu uzantının mevcut girişle çalıştırılmasının sonucudur.

Uzantıların sonuçlarını etkileyebilecek ek bir faktör de kullanım alanlarıdır. Kilit dosyasında depolanmasa da uzantının mevcut durumu kilit dosyasındaki durumla karşılaştırılırken kullanımlar dikkate alınır.

En İyi Uygulamalar

Kilit dosyası özelliğinin avantajlarından en iyi şekilde yararlanmak için aşağıdaki en iyi uygulamalardan yararlanabilirsiniz:

  • Kilit dosyasını, proje bağımlılıkları veya yapılandırmadaki değişiklikleri yansıtacak şekilde düzenli olarak güncelleyin. Bu sayede, sonraki derlemeler en güncel ve doğru bağımlılık grubuna dayanır.

  • Ortak çalışmayı kolaylaştırmak ve tüm ekip üyelerinin aynı kilit dosyasına erişebildiğinden emin olmak için kilit dosyasını sürüm kontrolüne dahil edin. Böylece proje genelinde tutarlı geliştirme ortamları oluşturabilirsiniz.

Bu en iyi uygulamaları uygulayarak Bazel'deki kilit dosyası özelliğini etkili bir şekilde kullanabilir, böylece daha verimli, güvenilir ve ortak çalışılabilir yazılım geliştirme iş akışları elde edebilirsiniz.