در این صفحه نحوه گسترش زبان BUILD با استفاده از ماکروها و قوانین توضیح داده شده است.
پسوندهای Bazel فایل هایی هستند که به .bzl
می شوند. برای وارد کردن نماد از یک برنامه افزودنی از یک دستور بار استفاده کنید.
قبل از یادگیری مفاهیم پیشرفته تر، ابتدا:
در مورد زبان Starlark که در فایل های
BUILD
و.bzl
استفاده می شود، بخوانید.یاد بگیرید که چگونه می توانید متغیرها را بین دو فایل
BUILD
به اشتراک بگذارید.
ماکروها و قوانین
ماکرو تابعی است که قوانین را نمونهسازی میکند. هنگامی که یک فایل BUILD
بیش از حد تکراری یا پیچیده می شود مفید است، زیرا به شما امکان می دهد از مقداری کد مجددا استفاده کنید. عملکرد به محض خواندن فایل BUILD
ارزیابی می شود. پس از ارزیابی فایل BUILD
، Bazel اطلاعات کمی در مورد ماکروها دارد: اگر ماکرو شما یک ژانر تولید کند، genrule
رفتار می کند که انگار شما genrule
را نوشته اید. در نتیجه، bazel query
genrule
فقط ژانر تولید شده را فهرست می کند.
یک قانون قدرتمندتر از یک کلان است. میتواند به بخشهای داخلی Bazel دسترسی داشته باشد و کنترل کاملی بر آنچه در جریان است داشته باشد. برای مثال ممکن است اطلاعات را به قوانین دیگر منتقل کند.
اگر می خواهید از منطق ساده استفاده مجدد کنید، با یک ماکرو شروع کنید. اگر یک کلان پیچیده شود، اغلب ایده خوبی است که آن را به یک قانون تبدیل کنید. پشتیبانی از یک زبان جدید معمولاً با یک قانون انجام می شود. قوانین برای کاربران پیشرفته هستند و اکثر کاربران هرگز مجبور به نوشتن آن نیستند. آنها فقط قوانین موجود را بارگیری و فراخوانی می کنند.
مدل ارزشیابی
یک ساخت شامل سه فاز است.
فاز بارگذاری ابتدا، تمامی پسوندها و تمامی فایل های
BUILD
را که برای ساخت مورد نیاز هستند، بارگیری و ارزیابی کنید. اجرای فایل هایBUILD
به سادگی قواعد را نمونه سازی می کند (هر بار که یک قانون فراخوانی می شود، به یک نمودار اضافه می شود). اینجاست که ماکروها ارزیابی می شوند.فاز تحلیل . کد قوانین اجرا می شود (عملکرد
implementation
آنها) و اقدامات نمونه سازی می شوند. یک عمل نحوه تولید مجموعهای از خروجیها از مجموعهای از ورودیها را شرح میدهد، مانند "gcc را در hello.c اجرا کنید و hello.o را دریافت کنید". قبل از اجرای دستورات واقعی باید به صراحت فهرست کنید که کدام فایل ها تولید می شوند. به عبارت دیگر، مرحله تجزیه و تحلیل گراف تولید شده توسط فاز بارگذاری را می گیرد و یک نمودار عمل تولید می کند.مرحله اجرا . اقدامات زمانی اجرا می شوند که حداقل یکی از خروجی های آنها مورد نیاز باشد. اگر یک فایل گم شده باشد یا اگر دستوری نتواند یک خروجی تولید کند، ساخت با شکست مواجه می شود. تست ها نیز در این مرحله اجرا می شوند.
Bazel از موازی سازی برای خواندن، تجزیه و ارزیابی فایل های .bzl
و فایل های BUILD
استفاده می کند. یک فایل حداکثر یک بار در هر ساخت خوانده می شود و نتیجه ارزیابی ذخیره می شود و مجددا استفاده می شود. یک فایل تنها زمانی ارزیابی می شود که تمام وابستگی های آن (گزاره های load()
) حل شود. با طراحی، بارگذاری یک فایل .bzl
. هیچ عارضه جانبی قابل مشاهده ای ندارد، فقط مقادیر و توابع را تعریف می کند.
بازل سعی می کند هوشمندانه عمل کند: از تجزیه و تحلیل وابستگی استفاده می کند تا بداند کدام فایل ها باید بارگذاری شوند، کدام قوانین باید تجزیه و تحلیل شوند و کدام اقدامات باید اجرا شوند. به عنوان مثال، اگر یک قانون اقداماتی را ایجاد کند که برای ساخت فعلی نیازی ندارید، آنها اجرا نخواهند شد.
ایجاد پسوند
برای استفاده مجدد از مقداری کد، اولین ماکرو خود را ایجاد کنید . سپس در مورد ماکروها و استفاده از آنها برای ایجاد "افعال سفارشی" بیشتر بیاموزید.
برای شروع کار با قوانین ، آموزش قوانین را دنبال کنید . در ادامه، میتوانید درباره مفاهیم قوانین بیشتر بخوانید.
دو لینک زیر هنگام نوشتن افزونه های خود بسیار مفید خواهند بود. آنها را در دسترس نگه دارید:
جلوتر رفتن
علاوه بر ماکروها و قوانین ، ممکن است بخواهید جنبه ها و قوانین مخزن را نیز بنویسید.
از Buildifier به طور مداوم برای قالب بندی و کدهای خود استفاده کنید.
راهنمای سبک
.bzl
را دنبال کنید.کد خود را تست کنید
عملکرد کد خود را بهینه کنید.
برنامه های افزودنی خود را برای افراد دیگر مستقر کنید.