Tedarikçi firma modu, bir Bzlmod özelliğidir ve projenizin yerel bir kopyasını oluşturmanızı sağlar. dış bağımlılıkları belirlemenize yardımcı olur. Bu, çevrimdışı derlemelerde veya bir dış bağımlılığın kaynağını kontrol edebilir.
Satıcı modunu etkinleştir
Tedarikçi firma modunu --vendor_dir
işaretini belirterek etkinleştirebilirsiniz.
Örneğin, dosyayı .bazelrc
dosyanıza ekleyerek:
# Enable vendor mode with vendor directory under <workspace>/vendor_src
common --vendor_dir=vendor_src
Tedarikçi dizini, çalışma alanı kökünüzün göreli bir yolu veya bir mutlak yol.
Belirli bir harici depo sağlayıcı
Hangi depoyu belirtmek için vendor
komutunu --repo
işaretiyle birlikte kullanabilirsiniz
sağlamak için hem standart depoyu
ad ve görünür depo
girin.
Örneğin, şunu çalıştırdığınızda:
bazel vendor --vendor_dir=vendor_src --repo=@rules_cc
veya
bazel vendor --vendor_dir=vendor_src --repo=@@rules_cc~
her ikisi de
<workspace root>/vendor_src/rules_cc~
Belirli hedefler için tedarikçi firma harici bağımlılıkları
Belirli hedef kalıpları oluşturmak için gereken tüm dış bağımlılıkları
bazel vendor <target patterns>
çalıştırabilirsiniz.
Örneğin:
bazel vendor --vendor_dir=vendor_src //src/main:hello-world //src/test/...
//src/main:hello-world
hedefini oluşturmak için gerekli tüm depoları tedarikçi firma olarak temin edecek
ve mevcut yapılandırmayla //src/test/...
altındaki tüm hedefler.
Gelişmiş seçeneklerde, bir bazel build --nobuild
komutuyla
Bu nedenle, bu komuta derleme işaretleri uygulanabilir ve
daha fazla bilgi verebilir.
Hedefi çevrimdışı olarak oluşturma
Harici bağımlılıklar sağlandığında, hedef çevrimdışı olarak
bazel build --vendor_dir=vendor_src //src/main:hello-world //src/test/...
Derleme, ağ erişimi olmayan temiz bir derleme ortamında çalışmalıdır ve önbelleğine bakabilirsiniz.
Bu nedenle, tedarikçi alınan kaynağı kontrol edip aynı dili başka bir makinede çevrimdışı olarak atanacakları anlamına gelir.
Tüm dış bağımlılıkları tedarik etme
Tüm depoları geçişli dış bağımlılıklar grafiğinizde sunmak için çalıştır:
bazel vendor --vendor_dir=vendor_src
Tüm bağımlılıkları tedarik etmenin birkaç dezavantajı olduğunu unutmayın:
- Geçişli olarak eklenenler de dahil olmak üzere tüm depoları getirmek zaman alabilir.
- Satıcı dizini çok büyük hale gelebilir.
- Mevcut platform veya ortamla uyumlu olmayan bazı depolar getirilemeyebilir.
Bu nedenle, önce belirli hedefler için tedarikçi bulmayı düşünebilirsiniz.
VENDOR.bazel ile tedarikçi modunu yapılandırma
Belirtilen depoların nasıl işleneceğini kontrol etmek için VENDOR.bazel dosyasını kullanabilirsiniz. altında bulabilirsiniz.
Kullanabileceğiniz iki yönerge vardır. Her ikisi de standart depo adlarını bağımsız değişken olarak kullanın:
ignore()
: Tedarikçi firma modunda bir depoyu tamamen yoksaymak için kullanılır.pin()
: depoyu varmış gibi mevcut tedarikçi firma kaynağına sabitlemek için kullanılır. Bu depo için--override_repository
flag'i. Bazel, sağlanan tedarikçi firmayı GÜNCELLEMEYECEK bu depoya ait kaynağı bulun. Kullanıcı, bu kod deposu için tedarikçi firma kaynağı manuel olarak değiştirip sürdürebilir.
Örneğin:
ignore("@@rules_cc~")
pin("@@bazel_skylib~")
Bu yapılandırmayla
- Her iki depo da sonraki tedarikçi komutlarından hariç tutulacak.
bazel_skylib
kod deposu, satıcı dizini olabilir.- Kullanıcı, tedarikçi tarafından sağlanan
bazel_skylib
kaynağını güvenli bir şekilde değiştirebilir. bazel_skylib
tedarikçisini yeniden sağlamak için kullanıcının PIN bildirimini devre dışı bırakması gerekir tıklayın.
Tedarikçi modunun işleyiş şeklini anlama
Bazel, $(bazel info
output_base)/external
altındaki bir projenin harici bağımlılıklarını getirir. Dış bağımlılıkları tedarik etmek
projeden çıkmak anlamına gelir.
ilgili dosyaları ve dizinleri bulup
geliştirme için kullanılan bir tedarikçidir.
Sağlanan içerik şunları içeriyor:
- Depo dizini
- Depo işaretçi dosyası
Derleme sırasında, tedarikçi firma tarafından sağlanan işaretçi dosyasının güncel olması veya deponun
VENDOR.bazel dosyasına sabitlendikten sonra,
yerine $(bazel info output_base)/external
altında bir sembolik bağlantısı
depolanıyor. Aksi takdirde, bir uyarı yazdırılır ve Bazel
yedek olarak en yeni sürümü getirir.
Satıcı kayıt dosyaları
Bazel'in harici verileri getirmek için Bazel modül çözünürlüğünü
bağımlılıkları. Alıcı:
çevrimdışı derlemeyi çalıştırdıktan sonra, Bazel tedarikçi firmasından getirilen
ağında (<vendor_dir>/_registries
dizininden) bulunur.
Satıcı sembolik bağlantıları
Harici depolar başka dosyalara işaret eden semboller içerebilir dizin oluşturabilirsiniz. Sembolik bağlantıların doğru şekilde çalışmasını sağlamak için Bazel stratejisi:
$(bazel info output_base)/external
sembolü olan bir<vendor_dir>/bazel-external
bağlantısı oluşturun. Her Bazel komutuyla yenilenir otomatik olarak oluşturur.- Tedarikçi firma tarafından sağlanan kaynak için, başlangıçta verilen
$(bazel info output_base)/external
altındaki göreli yola<vendor_dir>/bazel-external
.
Örneğin, orijinal sembolik bağlantı
<vendor_dir>/repo_foo~/link => $(bazel info output_base)/external/repo_bar~/file
Yeniden yazılacak
<vendor_dir>/repo_foo~/link => ../../bazel-external/repo_bar~/file
burada
<vendor_dir>/bazel-external => $(bazel info output_base)/external # This might be new if output base is changed
<vendor_dir>/bazel-external
, Bazel tarafından otomatik olarak oluşturulduğundan
giriş yapılmaması için .gitignore
veya eşdeğeri bir dosyaya eklenmesi önerilir.
Bu stratejiyle, tedarikçi tarafından sağlanan kaynaktaki sembolik bağlantılar Tedarikçi firma tarafından sağlanan kaynak başka bir konuma veya bazel çıkış tabanına taşındıktan sonra değiştirilmelidir.