Tedarikçi Modu

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

Tedarikçi firma modu, bir Bzlmod özelliğidir ve projenizin yerel bir kopyasını oluşturmanızı sağlar. ve 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 hem standart depoyu hem de 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 gereken tüm depoları tedarikçi firma olarak sağlayacaktır 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 kod deposu 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.
ziyaret edin.

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 farklı bir yoldan 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.

Tedarikçi firma kayıt defteri 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.

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.