Bazel modülleri

. Sorun bildirin Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Bazel modül, her biri birden çok sürümü olabilen bir Bazel projesidir. Bu araç, bağımlı olduğu diğer modüllerle ilgili meta verileri yayınlar. Bu Bağımlılık Yönetimi sistemlerindeki bilinen kavramlara benzerdir. Maven yapısı, bir npm paketi, Go modülü veya Cargo crate'i.

Bir modülün kod deposu kökünde bir MODULE.bazel dosyası ( WORKSPACE dosya) ekleyebilirsiniz. Bu dosya, modülün manifest adını belirten ve adını belirten bir manifestodur. doğrudan bağımlılıkların listesi ve diğer bilgiler bulunur. Temel örnek:

module(name = "my-module", version = "1.0")

bazel_dep(name = "rules_cc", version = "0.0.1")
bazel_dep(name = "protobuf", version = "3.19.0")

MODULE.bazel dosyalarında bulunan yönergelerin tam listesine bakın.

Modül çözümlemesi yapmak için Bazel işe kök modülün MODULE.bazel dosyası kullanır ve ardından sürekli olarak herhangi bir bağımlılığı Bazel kayıt otoritesinden bu tarihe kadar MODULE.bazel dosya bağımlılık grafiğinin tamamını keşfeder.

Bazel varsayılan olarak her modülün bir sürümünü seçer tıklayın. Bazel, her bir modülü bir kod deposuyla temsil eder ve kayıt otoritesine danışır ilgili bölümlere göz atmayı unutmayın.

Sürüm biçimi

Bazel çeşitlilik içeren bir ekosisteme sahiptir ve projelerde çeşitli sürüm oluşturma şemaları kullanılmaktadır. İlgili içeriği oluşturmak için kullanılan en popüler olanı SemVer, ancak çeşitli şemaların kullanıldığı önemli projeler, örneğin Abseil sürümler tarihe dayalıdır (örneğin, 20210324.2).

Bu nedenle, Bzlmod SemVer spesifikasyonunun daha rahat bir sürümünü kullanır. İlgili içeriği oluşturmak için kullanılan farklılıklar şunları içerir:

  • SemVer, “yayınlanan” sürüm bölümü 3'ten oluşmalıdır segmentler: MAJOR.MINOR.PATCH. Bazel'de bu şart gevşetilmiştir. izin verilen belirli bir sayıda segmente izin verilir.
  • SemVer'de, "sürüm"deki segmentlerin her biri kısmı yalnızca rakamlardan oluşmalıdır. Bazel'de bu değer gevşetilerek harflere de izin verilir ve karşılaştırma anlamsal olarak "tanımlayıcılar" ile eşleşir "yayın öncesi"nde bölümü.
  • Ayrıca ana, alt ve yama sürümü artışlarının anlamları da zorunlu kılınmaz. Ancak aşağıdakiler için uyumluluk düzeyine bakın: ve geriye dönük uyumluluğu nasıl ifade ettiğimize ilişkin ayrıntılar içerir.

Geçerli herhangi bir SemVer sürümü, geçerli bir Bazel modülü sürümüdür. Buna ek olarak, a ve b SemVer sürümleri, yalnızca aynı koşullar aşağıdaki durumlarda korunduğunda a < b ile karşılaştırılır: Bazel modül sürümleri olarak karşılaştırıldı.

Sürüm seçimi

Sürümlü bağımlılığın temel unsurlarından biri olan elmas bağımlılık problemini düşünün yönetim alanında Aşağıdaki gibi bir bağımlılık grafiğiniz olduğunu varsayalım:

       A 1.0
      /     \
   B 1.0    C 1.1
     |        |
   D 1.0    D 1.1

Hangi D sürümü kullanılmalıdır? Bzlmod, bu soruyu çözmek için Minimum Sürüm Seçimi (MVS) algoritması kullanıma sunuldu. MVS, tüm yeni içeriklerin sürümleri geriye dönük uyumludur; bu nedenle, en yüksek sürüm olan herhangi bir bağımlı tarafından belirtilir (örneğimizde D 1.1). Adı "minimal" çünkü D 1.1, gereksinimlerimizi karşılayabilecek ilk sürümdür — D 1.2 veya daha yeni bir dosya mevcut olsa bile bunlar seçilmez. MVS'yi kullanmak yüksek doğrulukta ve tekrarlanabilir bir sürüm seçme süreci

Yanklanan sürümler

Kaçınılması gereken belirli sürümler, kayıt otoritesi tarafından yanked olarak belirtilebilir. (örneğin, güvenlik açıkları için). Bazel, açılır menüden seçim yaparken yankı uygulanmış sürümü olabilir. Bu hatayı düzeltmek için daha yeni bir sürüme yükseltin Yankı olmayan sürümünü ya da --allow_yanked_versions işaretini kullanın.

Uyumluluk düzeyi

Go'da MVS'nin geriye dönük uyumluluk varsayımı, geriye dönük uyumsuz sürümlerini ayrı bir modül olarak yükleyebilirsiniz. açısından Yani A 1.x ve A 2.x, ayrı modüller olarak kabul edilir ve çözülmüş bağımlılık grafiğinde bir arada bulunur. Bu da aynı zamanda ana sürümü kodlamak için hiçbir istek yok. derleme zamanı veya bağlantı zamanı çakışmaları olabilir.

Ancak Bazel bu tür garantileri sağlayamadığından "ana sürüme" ihtiyacı vardır sayısını kontrol etmek için kullanır. Bu numaranın adı: uyumluluk düzeyi, module() yönergesi. Bu bilgiler kullanıldığında, Bazel bir web sitesini ziyaret eden Aynı modülün sürümlerinin farklı uyumluluk düzeylerine sahip olduğunu algılar mevcuttur.

Geçersiz kılar:

Bazel'in davranışını değiştirmek için MODULE.bazel dosyasında geçersiz kılmaları belirtin modülünü kullanabilirsiniz. Yalnızca kök modülün geçersiz kılmaları geçerli olur. Modüller bu bağımlılığın geçersiz kılmaları yoksayılır.

Her geçersiz kılma, belirli bir modül adı için belirtilir ve onun tüm modüllerini etkiler bağımlılık grafiğinde görebilirsiniz. Sadece kök modülün geçersiz kılmaları kök modülün sağlamadığı geçişli bağımlılıklar olabilir. bağlıdır.

Tek sürümü geçersiz kılma

single_version_override birden çok amaca hizmet eder:

  • version özelliğiyle, bir bağımlılığı belirli bir öğeye sabitleyebilirsiniz bağımlılığının hangi sürümlerinin istendiğine bakılmaksızın bağımlılık grafiğidir.
  • registry özelliğiyle, bu bağımlılığı normal kayıt defterini izlemek yerine seçim sürecini tamamlamalıdır.
  • patch* özellikleriyle, hangi yamaların uygulanacağını belirleyebilirsiniz indiremezsiniz.

Bu özelliklerin tümü isteğe bağlıdır ve birbirleriyle karıştırılıp eşleştirilebilir.

Birden çok sürümü geçersiz kılma

multiple_version_override aynı modülün birden çok sürümünün bağımlılığı grafiğidir.

Modül için izin verilen sürümlerin açık bir listesini belirtebilirsiniz. çözüm öncesinde bağımlılık grafiğinde bulunmalıdır. İzin verilen her sürüme bağlı olarak bazı geçişli bağımlılıklar. Şu tarihten sonra: çözünürlükte, yalnızca modülün izin verilen sürümleri kalır, Bazel yükseltmeleri modülün diğer sürümlerini, izin verilen en yakın sürüme aynı anda uyumluluk düzeyiyle belirlenir. Aynı uyumlulukta izin verilen daha yüksek bir sürüm yoksa bir hata mesajı verir.

Örneğin,1.11.31.51.72.0 bağımlılık grafiğini görebilirsiniz. Ana sürüm ise, çözüldüğünde seviye:

  • 1.3, 1.7 ve 2.0 sonuçlarına izin veren birden çok sürüm geçersiz kılması 1.1 sürüm 1.3, 1.5 sürüm ise 1.7 sürümüne yükseltiliyor ve diğer kullanıcılar sürümü aynı kaldı.
  • 1.5 ve 2.0 özelliklerine izin veren birden fazla sürümü geçersiz kılma, aşağıdaki gibi hataya neden olur: 1.7, yeni sürüme geçirilecek aynı uyumluluk düzeyinde daha yüksek bir sürüme sahip değil.
  • 1.9 ve 2.0 özelliklerine izin veren birden fazla sürümü geçersiz kılma, aşağıdaki gibi hataya neden olur: Çözüm yapılmadan önceki bağımlılık grafiğinde 1.9 mevcut değil.

Ayrıca, kullanıcılar registry özelliğini kullanmanız gerekir.

Kayıt otoritesi dışı geçersiz kılma işlemleri

Kayıt defteri olmayanlar, bir modülü sürüm çözünürlüğünden tamamen kaldırır. Bu durum, geçersiz kılma işlemlerini geçersiz kılar. Bazel bu MODULE.bazel dosyalarını bir kayıt defterinden değil, depoladığınızı düşünün.

Bazel, aşağıdaki kayıt defteri dışı geçersiz kılma işlemlerini destekler:

Kod deposu adları ve katı depolar

Bir deponun standart adı modülü module_name~version (örneğin, bazel_skylib~1.0.3) şeklindedir. Belirli bir kayıt defteri dışı geçersiz kılma, version bölümünü değiştirin override dizesiyle yapılır. Standart ad biçiminin API olmadığını unutmayın. ve her an değişebilir.

Bir deponun görünen adı modülünün doğrudan bağımlıları için varsayılan olarak modül adına ayarlanır. bazel_dep özelliğinin repo_name özelliği yönergesi aksini söylüyor. Bunun, bir modülün yalnızca ilgili modülün doğrudan ve bildirmeyi konuştuk. Bu, geçişli bağımlılıkları ifade eder.

Modül uzantıları, ek depolar da sunabilir görebilirsiniz.