แนวทางปฏิบัติแนะนำ

รายงานปัญหา ดูแหล่งที่มา

หน้านี้จะถือว่าคุณคุ้นเคยกับ Bazel และมีคําแนะนําและคําแนะนําเกี่ยวกับโครงสร้างของโปรเจ็กต์เพื่อใช้ประโยชน์จากฟีเจอร์ของ Bazel อย่างเต็มที่

เป้าหมายโดยรวมมีดังนี้

  • การใช้ทรัพยากร Dependency แบบละเอียดเพื่ออนุญาตการโหลดพร้อมกันและส่วนเพิ่ม
  • เก็บข้อมูลทรัพยากร Dependency ให้แน่นหนาอยู่เสมอ
  • ทําให้โค้ดมีโครงสร้างที่ดีและทดสอบได้
  • เพื่อสร้างการกําหนดค่าบิวด์ที่เข้าใจและดูแลรักษาได้ง่าย

หลักเกณฑ์เหล่านี้ไม่ใช่ข้อกําหนด: มีเพียงไม่กี่โปรเจ็กต์ที่จะปฏิบัติตามหลักเกณฑ์ทั้งหมดได้ หน้า Landing Page กล่าวว่า "เจ้าหน้าที่จะเสนอรางวัลสุดพิเศษให้แก่บุคคลแรกที่ผลิตโปรแกรมจริงที่ไม่ก่อให้เกิดข้อผิดพลาดเกี่ยวกับการตรวจสอบที่เข้มงวด" อย่างไรก็ตาม การใช้หลักการเหล่านี้ให้มากที่สุดควรทําให้โปรเจ็กต์อ่านได้ง่ายขึ้น มีข้อผิดพลาดน้อยลง และสร้างขึ้นได้เร็วขึ้น

หน้านี้ใช้ระดับข้อกําหนดที่อธิบายไว้ใน RFC นี้

การเรียกใช้บิลด์และการทดสอบ

โปรเจ็กต์ควรเรียกใช้ bazel build //... และ bazel test //... ในสาขาที่เสถียรได้เสมอ เป้าหมายที่จําเป็นแต่ไม่สร้างภายใต้สถานการณ์บางอย่าง (เช่น ต้องมีแฟล็กบิวด์เฉพาะ ไม่สร้างในบางแพลตฟอร์ม ต้องการข้อตกลงการอนุญาตให้ใช้สิทธิ) ควรติดแท็กให้เฉพาะเจาะจงมากที่สุด (เช่น "requires-osx") การติดแท็กนี้ช่วยให้กําหนดเป้าหมายการกรองได้ในระดับที่ละเอียดกว่าแท็ก "ด้วยตนเอง" และอนุญาตให้ผู้ที่ตรวจสอบไฟล์ BUILD เข้าใจว่าข้อจํากัดของเป้าหมายคืออะไร

ทรัพยากร Dependency ของบุคคลที่สาม

คุณสามารถประกาศทรัพยากร Dependency ของบุคคลที่สามได้ ดังนี้

  • ประกาศว่าเป็นที่เก็บระยะไกลในไฟล์ WORKSPACE
  • หรือใส่ไว้ในไดเรกทอรีชื่อ third_party/ ภายใต้ไดเรกทอรีของพื้นที่ทํางาน

ขึ้นอยู่กับไบนารี

ทุกอย่างควรสร้างขึ้นจากแหล่งที่มาทุกครั้งที่ทําได้ โดยทั่วไปแล้วหมายความว่าคุณอาจต้องสร้างไฟล์ BUILD และสร้าง some-library.so จากต้นทาง แทนที่จะขึ้นไลบรารี some-library.so โดยขึ้นอยู่กับเป้าหมายนั้น

การสร้างขึ้นจากแหล่งที่มาเสมอเป็นการตรวจสอบว่าบิลด์ไม่ได้ใช้ไลบรารีที่สร้างขึ้นด้วยแฟล็กที่เข้ากันไม่ได้หรือสถาปัตยกรรมอื่น และยังมีฟีเจอร์บางอย่าง เช่น การครอบคลุม การวิเคราะห์แบบคงที่ หรือการวิเคราะห์แบบไดนามิกที่ใช้ได้กับแหล่งที่มาเท่านั้น

การกำหนดเวอร์ชัน

ต้องการสร้างรหัสทั้งหมดจากส่วนหัวเมื่อใดก็ตามที่ทําได้ เมื่อต้องใช้เวอร์ชันต่างๆ ให้หลีกเลี่ยงการใส่เวอร์ชันไว้ในชื่อเป้าหมาย (เช่น //guava ไม่ใช่ //guava-20.0) การตั้งชื่อนี้ช่วยให้ไลบรารีอัปเดตได้ง่ายขึ้น (ต้องอัปเดตเป้าหมายเพียงรายการเดียวเท่านั้น) และมีความยืดหยุ่นต่อปัญหาเพชรมากกว่า กล่าวคือหากไลบรารีหนึ่งขึ้นอยู่กับ guava-19.0 และอีกไลบรารีหนึ่งขึ้นอยู่กับ guava-20.0 คุณอาจได้ไลบรารีที่พยายามพึ่งพา 2 เวอร์ชันที่ต่างกัน หากคุณสร้างชื่อแทนที่ทําให้เข้าใจผิดให้ชี้เป้าหมายทั้ง 2 รายการไปยังไลบรารี guava ไฟล์เดียว แสดงว่าไฟล์ BUILD ทําให้เข้าใจผิด

การใช้ไฟล์ .bazelrc

หากต้องการดูตัวเลือกเฉพาะโปรเจ็กต์ ให้ใช้ไฟล์การกําหนดค่า workspace/.bazelrc ของคุณ (ดูรูปแบบ Bazelcc)

หากต้องการรองรับตัวเลือกต่อผู้ใช้สําหรับโปรเจ็กต์ที่คุณไม่ต้องการตรวจสอบการควบคุมแหล่งที่มา ให้ใส่บรรทัดต่อไปนี้

try-import %workspace%/user.bazelrc

(หรือชื่อไฟล์อื่นๆ) ใน workspace/.bazelrc และเพิ่ม user.bazelrc ใน .gitignore

กล่องพัสดุ

ทุกไดเรกทอรีที่มีไฟล์ที่สร้างได้ควรเป็นแพ็กเกจ หากไฟล์ BUILD หมายถึงไฟล์ในไดเรกทอรีย่อย (เช่น srcs = ["a/b/C.java"]) นั่นเป็นสัญญาณที่ควรเพิ่มไฟล์ BUILD ไปยังไดเรกทอรีย่อยนั้น ยิ่งโครงสร้างนี้เกิดขึ้นนานเท่าไร ทรัพยากร Dependency แบบวงกลมที่ระบบจะสร้างขึ้นก็จะมีแนวโน้มสูงขึ้น ขอบเขตของเป้าหมายจะค่อยๆ เพิ่มขึ้น และต้องอัปเดตทรัพยากร Dependency แบบย้อนกลับมากขึ้นเรื่อยๆ