Mevcut programlarda WORKSPACE, Bzlmod eski WORKSPACE sistemini gelecekteki Bazel sürümlerinde değiştirebileceksiniz. Bu kılavuz size yardımcı olur projenizi Bzlmod'a taşıyıp harici öğeleri getirmek için WORKSPACE'i bırakın ve bildirmeyi konuştuk.
WORKSPACE - Bzlmod
Bazel'in WORKSPACE ve Bzlmod farklı söz dizimiyle benzer özellikler sunar. Bu Bu bölümde, belirli WORKSPACE işlevlerinden Bzlmod.
Bazel çalışma alanının kökünü tanımlama
WORKSPACE dosyası bir Bazel projesinin kaynak kökünü işaret eder. Bu sorumluluk,
, Bazel'ın 6.3 ve sonraki sürümlerinde MODULE.bazel ile değiştirilir. Bazel versiyonlu
6.3'ten önceki sürümlerde, WORKSPACE
WORKSPACE.bazel
bazı açıklamalar ekleyerek
ÇALIŞMA ALANI
# This file marks the root of the Bazel workspace. # See MODULE.bazel for external dependencies setup.
Bazelrc'inizde Bzlmod'u etkinleştirin
.bazelrc
, Bazel'i her çalıştırdığınızda uygulanacak işaretler belirlemenize olanak tanır. Etkinleştirmek için
Bzlmod, --enable_bzlmod
işaretini kullanın ve common
komutuna uygulayın.
bu tüm komutlara uygulanır:
.bazelrc
# Enable Bzlmod for every Bazel command common --enable_bzlmod
Çalışma alanınız için depo adını belirtin
ÇALIŞMA ALANI
workspace
işlevi, (çalışma alanınız için bir depo adı belirtin). Bu, belirli bir Çalışma alanında@<workspace name>//foo:bar
olarak referansta bulunulacak//foo:bar
. Belirtilmezse, çalışma alanı__main__
.## WORKSPACE workspace(name = "com_foo_bar")
Bzlmod
Aynı çalışma alanındaki
@<repo name>
içermeyen//foo:bar
söz dizimi. Ancak eski söz dizimine ihtiyacınız varsa bölümünde belirtilen modül adını kullanabilirsiniz. Depo olarakmodule
işlevi dokunun. Modül adı gerekli depo adından farklıysa şununrepo_name
özelliğini kullanabilir:module
kullanabilirsiniz.## MODULE.bazel module( name = "bar", repo_name = "com_foo_bar", )
Dış bağımlılıkları Bazel modülleri olarak getirin
Bağımlılığınız bir Bazel projesiyse, proje yöneticisi olarak Bazel modülünü kullanabilir.
ÇALIŞMA ALANI
WORKSPACE ile,
http_archive
veyagit_repository
kod deposu kurallarını Bazel projesinin kaynaklarını indirin.## WORKSPACE load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "bazel_skylib", urls = ["https://github.com/bazelbuild/bazel-skylib/releases/download/1.4.2/bazel-skylib-1.4.2.tar.gz"], sha256 = "66ffd9315665bfaafc96b52278f57c7e2dd09f5ede279ea6d39b2be471e7e3aa", ) load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace") bazel_skylib_workspace() http_archive( name = "rules_java", urls = ["https://github.com/bazelbuild/rules_java/releases/download/6.1.1/rules_java-6.1.1.tar.gz"], sha256 = "76402a50ae6859d50bd7aed8c1b8ef09dae5c1035bb3ca7d276f7f3ce659818a", ) load("@rules_java//java:repositories.bzl", "rules_java_dependencies", "rules_java_toolchains") rules_java_dependencies() rules_java_toolchains()
Gördüğünüz gibi, yükleme işlemi sırasında geçişli bağımlılıkları içeren bir makro deneyin. Hem
bazel_skylib
hem derules_java
,platform
öğesinin tam sürümü olanplatform
öğesine bağlıdır bağımlılık, makroların sırasına göre belirlenir.Bzlmod
Bağımlılığınız Bazel Central'da olduğu sürece Bzlmod ile Kayıt otoritesi veya özel Bazel'iniz kayıt defteri kullanıyorsanız,
bazel_dep
yönergesi.## MODULE.bazel bazel_dep(name = "bazel_skylib", version = "1.4.2") bazel_dep(name = "rules_java", version = "6.1.1")
Bzlmod, aşağıdakileri kullanarak Bazel modülü bağımlılıklarını geçişli olarak çözer: MVS algoritması. Bu nedenle, maksimum gerekli
platform
sürümü otomatik olarak seçilir.
Bağımlılığı Bazel modülü olarak geçersiz kılma
Kök modül olarak Bazel modülü bağımlılıklarını farklı yolları.
Daha fazla bilgi için lütfen geçersiz kılmalar bölümünü okuyun ekleyebilirsiniz.
Bazı örnek kullanımları örnekler depodur.
Modül uzantılarıyla harici bağımlılıkları getirin
Bağımlılığınız bir Bazel projesi değilse veya henüz herhangi bir Bazel'de yoksa
veya kayıt defteri gibi, isterseniz
use_repo_rule
veya modül
uzantıları.
ÇALIŞMA ALANI
http_file
kullanarak dosya indirme repository kuralı.## WORKSPACE load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file") http_file( name = "data_file", url = "http://example.com/file", sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", )
Bzlmod
Bzlmod ile MODULE.bazel dosyanızda
use_repo_rule
yönergesini kullanabilirsiniz dosyası oluşturun:## MODULE.bazel http_file = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file") http_file( name = "data_file", url = "http://example.com/file", sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", )
Temelde bu, bir modül uzantısı kullanılarak uygulanır. Gerekirse bir depo kuralını çağırmaktan daha karmaşık bir mantık gerçekleştirmek istiyorsanız, kendiniz uygulayabilirsiniz. Tanımı taşımanız gerekir
.bzl
dosyasına da alabilirsiniz. Bu aynı zamanda, WORKSPACE ve Bzlmod taşıma sürecinde kullanılabilir.## repositories.bzl load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file") def my_data_dependency(): http_file( name = "data_file", url = "http://example.com/file", sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", )
Bağımlılıklar makrosunu yüklemek için bir modül uzantısı uygulayın. Anahtar kelimelerin aynı
.bzl
dosyasında kullanmasına, ancak eski Bazel sürümlerini ayrı bir.bzl
dosyasında tanımlamak daha iyidir.## extensions.bzl load("//:repositories.bzl", "my_data_dependency") def _non_module_dependencies_impl(_ctx): my_data_dependency() non_module_dependencies = module_extension( implementation = _non_module_dependencies_impl, )
Depoyu kök projeye görünür hale getirmek için MODULE.bazel dosyasındaki modül uzantısı ve deponun kullanımları.
## MODULE.bazel non_module_dependencies = use_extension("//:extensions.bzl", "non_module_dependencies") use_repo(non_module_dependencies, "data_file")
Modül uzantısıyla çakışma harici bağımlılıkları çözün
Proje, temel alınan verilere göre harici depoları tanıtan bir makro sağlayabilir yaklaşık 10 dakika sürer. Peki, aynı görüşmede birden fazla arayan varsa bir çatışmaya neden olur mu?
foo
projesinin, version
öğesini kabul eden aşağıdaki makroyu sağladığını varsayalım:
tartışma.
## repositories.bzl in foo {:#repositories.bzl-foo}
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
def data_deps(version = "1.0"):
http_file(
name = "data_file",
url = "http://example.com/file-%s" % version,
# Omitting the "sha256" attribute for simplicity
)
ÇALIŞMA ALANI
WORKSPACE ile
@foo
tarayıcısından makroyu yükleyip sürümü belirtebilirsiniz. tam olarak bilmek isteyebilir. Başka bir bağımlınızın@bar
olduğunu varsayalım. Bu da@foo
metriğine bağlıdır ancak verilerin farklı bir sürümünü gerektirir desteklenmektedir.## WORKSPACE # Introduce @foo and @bar. ... load("@foo//:repositories.bzl", "data_deps") data_deps(version = "2.0") load("@bar//:repositories.bzl", "bar_deps") bar_deps() # -> which calls data_deps(version = "3.0")
Bu durumda son kullanıcı, WORKSPACE'i seçin. Yaşadığımız en büyük zorluklardan çok mantıklı bir yol sunmadığından, WORKSPACE ile ve bunları çözmek için kullanılan bir araçtır.
Bzlmod
foo
projesinin yazarı, Bzlmod ile çatışmaya neden olabilir. Örneğin, her zaman için uygun olanı seçmenin tüm Bazel modülleri arasında gereken maksimum veri bağımlılığı sürümü## extensions.bzl in foo load("//:repositories.bzl", "data_deps") data = tag_class(attrs={"version": attr.string()}) def _data_deps_extension_impl(module_ctx): # Select the maximal required version in the dependency graph. version = "1.0" for mod in module_ctx.modules: for data in mod.tags.data: version = max(version, data.version) data_deps(version) data_deps_extension = module_extension( implementation = _data_deps_extension_impl, tag_classes = {"data": data}, )
## MODULE.bazel in bar bazel_dep(name = "foo", version = "1.0") foo_data_deps = use_extension("@foo//:extensions.bzl", "data_deps_extension") foo_data_deps.data(version = "3.0") use_repo(foo_data_deps, "data_file")
## MODULE.bazel in root module bazel_dep(name = "foo", version = "1.0") bazel_dep(name = "bar", version = "1.0") foo_data_deps = use_extension("@foo//:extensions.bzl", "data_deps_extension") foo_data_deps.data(version = "2.0") use_repo(foo_data_deps, "data_file")
Bu durumda, kök modül
2.0
veri sürümünü gerektirir.bar
bağımlılığı için3.0
gerekiyor.foo
ürünündeki modül uzantısı doğru şekilde bu çakışmayı çözün ve veriler için otomatik olarak3.0
sürümünü seçin. desteklenmektedir.
Üçüncü taraf paket yöneticisini entegre etme
Modül uzantısı önemli bilgilerin toplanması için bir yol sağladığından, grafikten alınan bilgileri kullanarak, çözmek için özel mantık bağımlılıklarını ve harici depoları tanıtmak için depo kurallarını kuralları birbirinden entegre eden kural kümelerini geliştirmeleri için paket yöneticileri için e-posta gönderebilirsiniz.
Daha fazla bilgi edinmek için lütfen modül uzantıları sayfasını okuyun. daha fazla bilgi edineceksiniz.
Bağımlılıkları getirmek için Bzlmod'u zaten kullanan kural setlerinin listesini aşağıda bulabilirsiniz bilgi almalısınız:
Sanal bir paket yöneticisini entegre eden minimal bir örnek örnekler depodur.
Ana makinedeki araç zincirlerini algılama
Bazel derleme kurallarının ana makinenizde hangi araç zincirlerinin olduğunu algılaması gerektiğinde ana makineyi incelemek ve video oluşturmak için kod deposu kurallarını araç zinciri bilgilerini harici depo olarak kullanır.
ÇALIŞMA ALANI
Kabuk araç zincirini algılamak için aşağıdaki depo kuralından yararlanılır.
## local_config_sh.bzl def _sh_config_rule_impl(repository_ctx): sh_path = get_sh_path_from_env("SH_BIN_PATH") if not sh_path: sh_path = detect_sh_from_path() if not sh_path: sh_path = "/shell/binary/not/found" repository_ctx.file("BUILD", """ load("@bazel_tools//tools/sh:sh_toolchain.bzl", "sh_toolchain") sh_toolchain( name = "local_sh", path = "{sh_path}", visibility = ["//visibility:public"], ) toolchain( name = "local_sh_toolchain", toolchain = ":local_sh", toolchain_type = "@bazel_tools//tools/sh:toolchain_type", ) """.format(sh_path = sh_path)) sh_config_rule = repository_rule( environ = ["SH_BIN_PATH"], local = True, implementation = _sh_config_rule_impl, )
Depo kuralını WORKSPACE'te yükleyebilirsiniz.
## WORKSPACE load("//:local_config_sh.bzl", "sh_config_rule") sh_config_rule(name = "local_config_sh")
Bzlmod
Bzlmod ile aynı depoyu bir modül uzantısı kullanarak tanıtabilirsiniz. Bu, son dizinde
@data_file
deposunu sunmaya benzer. bölümüne ekleyin.## local_config_sh_extension.bzl load("//:local_config_sh.bzl", "sh_config_rule") sh_config_extension = module_extension( implementation = lambda ctx: sh_config_rule(name = "local_config_sh"), )
Ardından, MODULE.bazel dosyasındaki uzantıyı kullanın.
## MODULE.bazel sh_config_ext = use_extension("//:local_config_sh_extension.bzl", "sh_config_extension") use_repo(sh_config_ext, "local_config_sh")
Araç zincirlerini kaydedin ve yürütme platformları
Son bölümün ardından, depo barındırma araç zincirini tanıttıktan sonra
(ör. local_config_sh
), büyük olasılıkla bu bilgileri
kullanabilirsiniz.
ÇALIŞMA ALANI
WORKSPACE ile araç zincirini aşağıdaki yöntemlerle kaydedebilirsiniz.
.bzl
dosyasına araç zincirini kaydedebilir ve makroyu WORKSPACE dosyası.## local_config_sh.bzl def sh_configure(): sh_config_rule(name = "local_config_sh") native.register_toolchains("@local_config_sh//:local_sh_toolchain")
## WORKSPACE load("//:local_config_sh.bzl", "sh_configure") sh_configure()
Alternatif olarak, araç zincirini doğrudan WORKSPACE dosyasına kaydedin.
## WORKSPACE load("//:local_config_sh.bzl", "sh_config_rule") sh_config_rule(name = "local_config_sh") register_toolchains("@local_config_sh//:local_sh_toolchain")
Bzlmod
Bzlmod sayesinde
register_toolchains
veregister_execution_platforms
API'ler yalnızca MODULE.bazel dosyasında kullanılabilir. Şu numarayı arayamazsınız: Bir modül uzantısındanative.register_toolchains
.## MODULE.bazel sh_config_ext = use_extension("//:local_config_sh_extension.bzl", "sh_config_extension") use_repo(sh_config_ext, "local_config_sh") register_toolchains("@local_config_sh//:local_sh_toolchain")
WORKSPACE
bünyesinde kayıtlı araç zincirleri ve yürütme platformları,
WORKSPACE.bzlmod
ve her bir Bazel modülünün MODULE.bazel
dosyası şu komutu izler:
araç zinciri seçimi sırasında öncelik sırası (en yüksekten en düşüğe):
- kök modülün ana makinesinde kayıtlı araç zincirleri ve yürütme
MODULE.bazel
dosyası yükleyin. WORKSPACE
içinde kayıtlı araç zincirleri ve yürütme platformları ya daWORKSPACE.bzlmod
dosya- modüller tarafından kaydedilen araç zincirleri ve yürütme platformları. (geçişli) bağımlılıklarını ifade eder.
WORKSPACE.bzlmod
kullanılmadığında:WORKSPACE
içinde kayıtlı araç zincirleri sonek.
Yerel depolar sunun
Yeni bir dosyaya ihtiyacınız olduğunda yerel depo olarak bir bağımlılığı veya hata ayıklama için bağımlılığın yerel sürümünü içeren bir dizinini harici depo olarak kullanır.
ÇALIŞMA ALANI
WORKSPACE ile bu işlem iki yerel depo kuralıyla gerçekleştirilir:
local_repository
venew_local_repository
.## WORKSPACE local_repository( name = "rules_java", path = "/Users/bazel_user/workspace/rules_java", )
Bzlmod
Bzlmod ile,
local_path_override
- Bir modülü yerel yolla geçersiz kılın.## MODULE.bazel bazel_dep(name = "rules_java") local_path_override( module_name = "rules_java", path = "/Users/bazel_user/workspace/rules_java", )
Modül uzantısına sahip yerel bir depo sunmak da mümkündür. Ancak modül uzantısında
native.local_repository
çağıramazsınız. tüm yerel depo kurallarını daha da belirginleştirmek için sürekli olarak çalışıyoruz ( İlerleme durumunu görmek için #18285) girin. Daha sonra modüldeki ilgili yıldızılocal_repository
çağırabilirsiniz. uzantısına sahip olur. Projenizin özel bir sürümünü uygulamak da Bu, sizin için engelleyen bir sorunsalocal_repository
depo kuralını uygulayın.
Hedefleri bağla
WORKSPACE'teki bind
kuralı kullanımdan kaldırıldı ve
Bzlmod'da desteklenmez. Bir hedefe Google Ads'de
özel //external
paketi. Buna bağlı olarak tüm kullanıcılar taşınmalıdır.
Örneğin, abone sayınız
## WORKSPACE
bind(
name = "openssl",
actual = "@my-ssl//src:openssl-lib",
)
Bu, diğer hedeflerin //external:openssl
bağımlılığına bağlı olmasına izin verir. Şunları taşıyabilirsiniz
şu şekilde uzaklaştırırsınız:
Tüm
//external:openssl
kullanımlarını şununla değiştir:@my-ssl//src:openssl-lib
.İsterseniz
alias
derleme kuralını da kullanabilirsinizAşağıdaki hedefi bir pakette tanımlayın (ör.
//third_party
)## third_party/BUILD alias( name = "openssl, actual = "@my-ssl//src:openssl-lib", )
Tüm
//external:openssl
kullanımlarını şununla değiştir://third_party:openssl-lib
.
Taşıma
Bu bölümde, Bzlmod taşıma işleminizle ilgili faydalı bilgiler ve yol gösterici bilgiler sunulmaktadır bahsedeceğim.
WORKSPACE'teki bağımlılıklarınızı öğrenin
Taşımanın ilk adımı, sahip olduğunuz bağımlılıkları anlamaktır. Google
modelde tam olarak hangi bağımlılıkların ortaya çıktığını
Geçişli bağımlılıklar genellikle *_deps
ile yüklendiğinden WORKSPACE dosyası
makrolarında da yer alır.
Çalışma alanı çözümlenen dosyayla harici bağımlılığı inceleyin
Neyse ki bayrağı
--experimental_repository_resolved_file
yardımcı olabilir. Bu işaret temel olarak bir "kilit dosyası" oluşturur /tüm harici kullanıcılar
bağımlılıklarını görebilirsiniz. Daha fazla bilgiyi bu blog'da bulabilirsiniz.
yayın.
İki şekilde kullanılabilir:
Belirli hedefleri oluştururken gereken dış bağımlılıklarla ilgili bilgileri getirmek.
bazel clean --expunge bazel build --nobuild --experimental_repository_resolved_file=resolved.bzl //foo:bar
WORKSPACE dosyasında tanımlanan tüm harici bağımlılıkların bilgilerini getirmek için.
bazel clean --expunge bazel sync --experimental_repository_resolved_file=resolved.bzl
bazel sync
komutunu kullanarak, WORKSPACE dosyası, şunları içerir:bind
kullanımregister_toolchains
veregister_execution_platforms
kullanım
Ancak, projeniz platformlar arasıysa bazel senkronizasyonu bazı cihazlarda bozulabilir belirli depo kuralları yalnızca desteklenen platformlarda doğru şekilde çalışabileceğinden, platformlar.
Komutu çalıştırdıktan sonra harici
bağımlılıklarını resolved.bzl
dosyasına koyabilirsiniz.
bazel query
ile harici bağımlılığı inceleyin
Ayrıca bazel query
hizmetinin depo kurallarını incelemek için kullanılabileceğini
bazel query --output=build //external:<repo name>
Daha kullanışlı ve hızlı olsa da bazel sorgusu harici bağımlılık sürümü, Bu nedenle kullanırken dikkatli olun! Harici sorguları sorgulama ve denetleme Bzlmod ile olan bağımlılıkları yeni bir alt komut'u ekleyin.
Yerleşik varsayılan bağımlılıklar
--experimental_repository_resolved_file
tarafından oluşturulan dosyayı kontrol ederseniz
WORKSPACE'inizde tanımlanmamış birçok bağımlılık bulacaksınız.
Bunun nedeni, Bazel'in kullanıcının WORKSPACE öğesine önek ve sonek eklemesidir
bazı varsayılan bağımlılıkları yerleştirmek için dosya içeriğini kullanarak
yerel kurallar (ör. @bazel_tools
, @platforms
ve @remote_java_tools
). Entegre
Bu bağımlılıklar yerleşik bir modülle tanıtılıyor.
bazel_tools
, diğer tüm öğeler için varsayılan bir bağımlılıktır
Bazel modülü.
Kademeli taşıma için karma mod
Bzlmod ve WORKSPACE yan yana çalışarak bağımlılıkların taşınmasına olanak tanır dosyasını Bzlmod'a taşımayı öğreteceğim.
WORKSPACE.bzlmod
Taşıma sırasında Bazel kullanıcılarının ve Bzlmod etkin değilse. WORKSPACE.bzlmod desteği daha akıcı bir süreç.
WORKSPACE.bzlmod, WORKSPACE ile tam olarak aynı söz dizimine sahiptir. Bzlmod etkinleştirildiğinde Çalışma alanı kökünde bir WORKSPACE.bzlmod dosyası da varsa:
WORKSPACE.bzlmod
geçerlilik kazanır veWORKSPACE
içeriği yoksayılır.- Hiçbir önek veya sonek WORKSPACE.bzlmod dosyasına eklendi.
WORKSPACE.bzlmod dosyasını kullanmak taşıma işlemini kolaylaştırabilir, çünkü:
- Bzlmod devre dışı bırakıldığında, orijinal WORKSPACE dosyası.
- Bzlmod etkinleştirildiğinde, geriye kalan bağımlılıkları daha iyi takip edebilirsiniz. WORKSPACE.bzlmod ile taşıyın.
Depo görünürlüğü
Bzlmod, belirli bir veri deposundan başka hangi depoların görülebileceğini Depo adlarını ve katı kurallı kod deposunu deps inceleyin.
Burada, farklı türlerdeki depo görünürlüklerinin depolarını da içerir.
Ana depodan | Bazel modül depolarından | Modül uzantı depolarından | WORKSPACE depolarından | |
---|---|---|---|---|
Ana depo | Gösteriliyor | Kök modül doğrudan bağımlılıksa | Kök modül, modül uzantısını barındıran modülün doğrudan bağımlılığıysa | Gösteriliyor |
Bazel modülü depoları | Doğrudan satış | Doğrudan satış | Modül uzantısını barındıran modülün doğrudan açıklamaları | Kök modülün doğrudan açıklamaları |
Modül uzantısı depoları | Doğrudan satış | Doğrudan satış | Modül uzantısını barındıran modülün doğrudan açıklamaları + aynı modül uzantısı tarafından oluşturulan tüm depolar | Kök modülün doğrudan açıklamaları |
WORKSPACE Kod Depoları | Tümü görünür durumda | Görünmez | Görünmez | Tümü görünür durumda |
Taşıma süreci
Tipik bir Bzlmod taşıma işlemi aşağıdaki gibi görünebilir:
- WORKSPACE'te hangi bağımlılıklarınızın olduğunu anlayın.
- Proje kökünüze boş bir MODULE.bazel dosyası ekleyin.
- WORKSPACE dosya içeriğini geçersiz kılmak için boş bir WORKSPACE.bzlmod dosyası ekleyin.
- Bzlmod etkin olacak şekilde hedeflerinizi oluşturun ve hangi deponun eksik.
- Çözülmüş bağımlılıktaki eksik deponun tanımını kontrol etme dosyası olarak kaydedebilirsiniz.
- Eksik bağımlılığı bir modül aracılığıyla Bazel modülü olarak tanıtma uzantısını kullanabilir veya daha sonra taşımak için WORKSPACE.bzlmod içinde bırakabilirsiniz.
- 4'e geri dönün ve tüm bağımlılıklar mevcut olana kadar tekrarlayın.
Taşıma aracı
Size, Google Etiket Yöneticisi'ni kullanabileceğiniz etkileşimli bir Bzlmod taşıma yardımcı komut dosyası size yardımcı olabilir.
Komut dosyası şunları yapar:
- WORKSPACE çözümlenen dosyayı oluşturun ve ayrıştırın.
- Çözümlenen dosyadaki depo bilgilerini insanlar tarafından okunabilecek şekilde yazdırın.
- Bazel derleme komutunu çalıştırın, tanınan hata mesajlarını algılayın ve kolay bir yoludur.
- BCR'de halihazırda bir bağımlılık olup olmadığını kontrol edin.
- MODULE.bazel dosyasına bağımlılık ekleyin.
- Modül uzantısı aracılığıyla bağımlılık ekleyin.
- WORKSPACE.bzlmod dosyasına bir bağımlılık ekleyin.
Bu aracı kullanmak için en son Bazel sürümünün yüklü olduğundan emin olun ve şu komutu kullanın:
git clone https://github.com/bazelbuild/bazel-central-registry.git
cd <your workspace root>
<BCR repo root>/tools/migrate_to_bzlmod.py -t <your build targets>
Bazel modüllerini yayınlayın
Bazel projeniz başka projelere bağımlıysa projesinin Bazel Central Registry'de bulunması gerekiyor.
BCR'de projenizi kontrol edebilmek için şu kaynak arşiv URL'sine ihtiyacınız vardır: gösterir. Kaynak arşivi oluştururken dikkate almanız gereken birkaç nokta vardır:
Arşivin belirli bir sürümü işaret ettiğinden emin olun.
Bzlmod'un şunları yapması gerektiğinden, BCR yalnızca sürümü belirlenmiş kaynak arşivleri kabul edebilir ve bağımlılık çözümü sırasında sürüm karşılaştırması yapmalısınız.
Arşiv URL'sinin sabit olduğundan emin olun.
Bazel, arşivin içeriğini karma değeriyle doğrular. Bu nedenle, indirilen dosyanın sağlama toplamının hiçbir zaman değişmediğinden emin olun. URL lütfen sürüm sayfasında bir sürüm arşivi oluşturup yükleyin. GitHub, gösteriyoruz. Kısaca,
https://github.com/<org>/<repo>/releases/download/...
kararlı olarak kabul edilirhttps://github.com/<org>/<repo>/archive/...
ise değil. GitHub'ı kontrol edin Arşiv Denetimi Kesinti inceleyebilirsiniz.Kaynak ağacın, orijinal deponun düzenine uyduğundan emin olun.
Deponuz çok büyükse ve bir dağıtım oluşturmak istiyorsanız gereksiz kaynakları çıkararak küçültülmüş bir arşiv oluşturun. çıkarılmış kaynak ağacın, orijinal kaynak ağacının bir alt kümesi olduğundan emin olmaktır. Bu son kullanıcıların modülü sürüm dışı bir sürüme geçirmesini kolaylaştırır sürümü
archive_override
tarafından vegit_override
.En yaygın API'ler.
Test modülü, kendine ait WORKSPACE ve MODULE.bazel'e sahip bir Bazel projesidir. kaynak arşivin bir alt dizininde bulunan ve üzerinde değişiklik yapılmayacaktır. Belge, görsel senaryoda entegrasyon testlerinden yararlanabilirsiniz. Kontrol et test modülünü inceleyin.
Kaynak arşiv URL'niz hazır olduğunda BCR katkısını izleyin yönergeleri izleyerek modülünüzü bir GitHub ile BCR'ye Çekme İsteği.
Şuralarda yayınla: Sizin için BCR GitHub Uygulaması kod deposunu kullanmanızı öneririz.
En iyi uygulamalar
Bu bölümde, performansınızı iyileştirmek için izlemeniz gereken birkaç en iyi uygulama ve dış bağımlılıklarınızı yönetmenize yardımcı olur.
Gereksiz bağımlılıkları getirmekten kaçınmak için hedefleri farklı paketlere bölün.
#12835'e bakın, dev burada bir derleme çalışması için test bağımlılığının gereksiz yere getirilmeye bir hedef belirleyebilirsiniz. Bu, aslında Bzlmod'a özgü değildir, ancak bu uygulamaların izlenmesi, geliştirici bağımlılıklarını doğru şekilde belirlemeyi kolaylaştırır.
Geliştirici bağımlılıklarını belirleme
Şu değerler için dev_dependency
özelliğini doğru olarak ayarlayabilirsiniz:
bazel_dep
ve
use_extension
yönergelerini kullanarak
bağımlı projelere uygulanmazlar. Kök modül olarak,
Hedeflerinizin olup olmadığını doğrulamak için --ignore_dev_dependency
işaretini kullanın
geliştirici bağımlıları olmadan
derlemeye devam edebilir.
Topluluk taşıma işleminin ilerleme durumu
Search Console'da bulunan Bazel Central Registry kullanıp kullanmadığınızı kontrol edin. İsterseniz programa katılabilirsiniz. GitHub tartışması: taşımanızı engelleyen bağımlılıkları olumlu oylayın veya yayınlayın.
Sorun bildirme
Bilinen Bzlmod için lütfen Bazel GitHub sorun listesini kontrol edin sorunları. Engellemeyi kaldırmanıza yardımcı olabilecek yeni sorunları veya özellik isteğinde bulunabilirsiniz taşımayı unutmayın!