หากมีข้อสงสัยหรือต้องการความช่วยเหลือ โปรดดูการขอรับความช่วยเหลือ
Bazel คืออะไร
Bazel เป็นเครื่องมือที่ทำให้การสร้างและทดสอบซอฟต์แวร์เป็นแบบอัตโนมัติ งานบิลด์ที่รองรับ รวมถึงการเรียกใช้คอมไพเลอร์และลิงเกอร์เพื่อสร้างโปรแกรมที่เรียกใช้งานได้และ ไลบรารี รวมถึงการประกอบแพ็กเกจที่พร้อมใช้งานสำหรับ Android, iOS และสภาพแวดล้อมเป้าหมายอื่นๆ Bazel คล้ายกับเครื่องมืออื่นๆ เช่น Make, Ant, Gradle, Buck, Pants และ Maven
Bazel มีอะไรพิเศษ
Bazel ออกแบบมาให้เหมาะกับวิธีพัฒนาซอฟต์แวร์ที่ Google โดยมี ฟีเจอร์ต่อไปนี้
- การรองรับหลายภาษา: Bazel รองรับหลายภาษา และสามารถขยายเพื่อรองรับภาษาโปรแกรมใดก็ได้
- ภาษาบิลด์ระดับสูง: โปรเจ็กต์จะอธิบายใน
BUILDซึ่งเป็นรูปแบบข้อความที่กระชับซึ่งอธิบายโปรเจ็กต์เป็นชุดของไลบรารี ไบนารี และการทดสอบขนาดเล็กที่เชื่อมต่อกัน ในทางตรงกันข้าม เครื่องมืออย่าง Make จะกำหนดให้คุณต้อง อธิบายไฟล์แต่ละไฟล์และการเรียกใช้คอมไพเลอร์ - การรองรับหลายแพลตฟอร์ม: คุณสามารถใช้เครื่องมือและไฟล์
BUILDเดียวกัน เพื่อสร้างซอฟต์แวร์สำหรับสถาปัตยกรรมต่างๆ และแม้แต่แพลตฟอร์มต่างๆ ได้ ที่ Google เราใช้ Bazel เพื่อสร้างทุกอย่างตั้งแต่แอปพลิเคชันเซิร์ฟเวอร์ที่ทำงานบนระบบในศูนย์ข้อมูลไปจนถึงแอปไคลเอ็นต์ที่ทำงานบนโทรศัพท์มือถือ - ความสามารถในการทำซ้ำ: ในไฟล์
BUILDไลบรารี การทดสอบ และไบนารีแต่ละรายการต้อง ระบุการอ้างอิงโดยตรงอย่างครบถ้วน Bazel ใช้ข้อมูลการขึ้นต่อกันนี้เพื่อทราบว่าต้องสร้างใหม่เมื่อใดเมื่อคุณทำการเปลี่ยนแปลงไฟล์ต้นฉบับ และทราบว่างานใดที่สามารถเรียกใช้แบบขนานได้ ซึ่งหมายความว่าการสร้างทั้งหมดจะ เพิ่มขึ้นเรื่อยๆ และจะให้ผลลัพธ์เดียวกันเสมอ - ปรับขนาดได้: Bazel สามารถจัดการบิลด์ขนาดใหญ่ได้ ที่ Google มีไบนารีเซิร์ฟเวอร์ที่มีไฟล์ต้นฉบับ 100,000 ไฟล์ และบิลด์ที่ไม่มีการเปลี่ยนแปลงไฟล์ใดๆ ใช้เวลาประมาณ 200 มิลลิวินาที
ทำไม Google ถึงไม่ใช้...
- Make, Ninja: เครื่องมือเหล่านี้ให้การควบคุมที่แม่นยำมากเกี่ยวกับคำสั่งที่จะเรียกใช้เพื่อสร้างไฟล์ แต่ผู้ใช้ต้องเป็นผู้เขียนกฎที่ถูกต้อง
- ผู้ใช้จะโต้ตอบกับ Bazel ในระดับที่สูงขึ้น ตัวอย่างเช่น Bazel มี กฎในตัวสำหรับ "การทดสอบ Java" "ไบนารี C++" และแนวคิดต่างๆ เช่น "แพลตฟอร์มเป้าหมาย" และ "แพลตฟอร์มโฮสต์" กฎเหล่านี้ได้รับการทดสอบ มาอย่างดีแล้วว่าใช้งานได้จริง
- Ant และ Maven: Ant และ Maven มุ่งเน้นไปที่ Java เป็นหลัก ในขณะที่ Bazel รองรับหลายภาษา Bazel สนับสนุนการแบ่งฐานของโค้ดออกเป็นหน่วยย่อยที่เล็กลง ซึ่งนำกลับมาใช้ใหม่ได้ และสามารถสร้างใหม่เฉพาะหน่วยที่ต้องสร้างใหม่เท่านั้น ซึ่งจะช่วยเพิ่มความเร็วในการพัฒนาเมื่อทำงานกับฐานของโค้ดขนาดใหญ่
- Gradle: ไฟล์การกำหนดค่า Bazel มีโครงสร้างมากกว่าของ Gradle มาก ทำให้ Bazel เข้าใจได้อย่างชัดเจนว่าแต่ละการดำเนินการทำอะไร ซึ่งจะช่วยให้มีความ ขนานกันมากขึ้นและทำซ้ำได้ดียิ่งขึ้น
- Pants, Buck: เครื่องมือทั้ง 2 อย่างนี้สร้างและพัฒนาโดยอดีตพนักงาน Google ที่ Twitter และ Foursquare และ Facebook ตามลำดับ ซึ่งได้รับการออกแบบ ตาม Bazel แต่ชุดฟีเจอร์แตกต่างกัน จึงไม่สามารถ ใช้แทนกันได้
Bazel มาจากไหน
Bazel เป็นเครื่องมือที่ Google ใช้สร้างซอฟต์แวร์เซิร์ฟเวอร์ภายใน นอกจากนี้ เรายังขยายการพัฒนาไปยังซอฟต์แวร์อื่นๆ ด้วย เช่น แอปบนอุปกรณ์เคลื่อนที่ (iOS, Android) ที่เชื่อมต่อกับเซิร์ฟเวอร์ของเรา
คุณเขียนเครื่องมือภายในใหม่เป็นโอเพนซอร์สไหม เป็นส้อมไหม
Bazel แชร์โค้ดส่วนใหญ่กับเครื่องมือภายใน และมีการใช้กฎของ Bazel สำหรับการบิลด์หลายล้านรายการทุกวัน
ทำไม Google จึงสร้าง Bazel
เมื่อนานมาแล้ว Google สร้างซอฟต์แวร์โดยใช้ Makefiles ขนาดใหญ่ที่สร้างขึ้น ซึ่งทำให้การสร้างช้าและไม่น่าเชื่อถือ และเริ่มส่งผลต่อประสิทธิภาพการทำงานของนักพัฒนาซอฟต์แวร์และความคล่องตัวของบริษัท Bazel เป็นวิธี แก้ปัญหาเหล่านี้
Bazel ต้องใช้คลัสเตอร์บิลด์ไหม
โดยค่าเริ่มต้น Bazel จะเรียกใช้การดำเนินการบิลด์ในเครื่อง อย่างไรก็ตาม Bazel ยังเชื่อมต่อกับคลัสเตอร์บิลด์ได้ด้วย เพื่อให้บิลด์และการทดสอบเร็วขึ้น ดูรายละเอียดเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับ การดำเนินการและการแคชระยะไกลและ การแคชระยะไกล
กระบวนการพัฒนาของ Google ทำงานอย่างไร
สำหรับโค้ดเบสของเซิร์ฟเวอร์ เราใช้เวิร์กโฟลว์การพัฒนาต่อไปนี้
- โค้ดเซิร์ฟเวอร์ทั้งหมดของเราอยู่ในระบบควบคุมเวอร์ชันเดียวขนาดใหญ่
- ทุกคนสร้างซอฟต์แวร์ด้วย Bazel
- ทีมต่างๆ เป็นเจ้าของส่วนต่างๆ ของโครงสร้างแหล่งที่มา และทำให้คอมโพเนนต์ของตนพร้อมใช้งานเป็น
BUILDเป้าหมาย - การแยกสาขาใช้เพื่อจัดการรุ่นเป็นหลัก ดังนั้นทุกคนจึงพัฒนาซอฟต์แวร์ในรีวิชันล่าสุด
Bazel เป็นรากฐานของปรัชญานี้ เนื่องจาก Bazel กำหนดให้ระบุการขึ้นต่อกันทั้งหมดอย่างครบถ้วน เราจึงคาดการณ์ได้ว่าโปรแกรมและการทดสอบใดบ้างที่ได้รับผลกระทบจากการเปลี่ยนแปลง และตรวจสอบโปรแกรมและการทดสอบเหล่านั้นก่อนส่ง
ดูข้อมูลเบื้องหลังเพิ่มเติมเกี่ยวกับกระบวนการพัฒนาที่ Google ได้ในบล็อกเครื่องมือสำหรับวิศวกร
เหตุใดคุณจึงเปิดตัว Bazel
การสร้างซอฟต์แวร์ควรเป็นเรื่องง่ายและสนุก การสร้างที่ช้าและคาดเดาไม่ได้ทำให้การเขียนโปรแกรมไม่สนุก
เหตุใดฉันจึงควรใช้ Bazel
- Bazel อาจช่วยให้คุณสร้างได้เร็วขึ้นเนื่องจากสามารถคอมไพล์เฉพาะไฟล์ที่ต้องคอมไพล์ซ้ำได้ ในทำนองเดียวกัน ก็สามารถข้ามการทดสอบซ้ำที่ทราบว่าไม่มีการเปลี่ยนแปลงได้ด้วย
- Bazel ให้ผลลัพธ์ที่แน่นอน ซึ่งจะช่วยขจัดความคลาดเคลื่อนระหว่าง การสร้างแบบเพิ่มและการสร้างใหม่ทั้งหมด แล็ปท็อปและระบบ CI เป็นต้น
- Bazel สามารถสร้างแอปไคลเอ็นต์และแอปเซิร์ฟเวอร์ที่แตกต่างกันด้วยเครื่องมือเดียวกันจากเวิร์กสเปซเดียวกัน เช่น คุณสามารถเปลี่ยนโปรโตคอลไคลเอ็นต์/เซิร์ฟเวอร์ได้ในการคอมมิตเดียว และทดสอบว่าแอปบนอุปกรณ์เคลื่อนที่ที่อัปเดตแล้วทำงานร่วมกับเซิร์ฟเวอร์ที่อัปเดตแล้วได้ โดยสร้างทั้ง 2 อย่างด้วยเครื่องมือเดียวกัน และรับประโยชน์ทั้งหมดของ Bazel ที่กล่าวถึงข้างต้น
ฉันดูตัวอย่างได้ไหม
ได้ ดูตัวอย่างแบบง่าย หรืออ่านซอร์สโค้ดของ Bazel เพื่อดูตัวอย่างที่ซับซ้อนกว่า
Bazel เหมาะกับงานใดมากที่สุด
Bazel โดดเด่นในการสร้างและทดสอบโปรเจ็กต์ที่มีคุณสมบัติต่อไปนี้
- โปรเจ็กต์ที่มีโค้ดเบสขนาดใหญ่
- โปรเจ็กต์ที่เขียนในภาษาแบบคอมไพล์ (หลายภาษา)
- โปรเจ็กต์ที่ติดตั้งใช้งานในหลายแพลตฟอร์ม
- โปรเจ็กต์ที่มีการทดสอบอย่างครอบคลุม
ฉันจะเรียกใช้ Bazel ได้ที่ไหน
Bazel ทำงานบน Linux, macOS (OS X) และ Windows
การพอร์ตไปยังแพลตฟอร์ม UNIX อื่นๆ ควรทำได้ค่อนข้างง่าย ตราบใดที่มี JDK สำหรับแพลตฟอร์มนั้น
ฉันไม่ควรใช้ Bazel สำหรับอะไร
- Bazel พยายามแคชอย่างชาญฉลาด ซึ่งหมายความว่าไม่เหมาะสำหรับ
การเรียกใช้การดำเนินการบิลด์ที่เอาต์พุตไม่ควรแคช ตัวอย่างเช่น ไม่ควรเรียกใช้ขั้นตอนต่อไปนี้จาก Bazel
- ขั้นตอนการรวบรวมที่ดึงข้อมูลจากอินเทอร์เน็ต
- ขั้นตอนการทดสอบที่เชื่อมต่อกับอินสแตนซ์ QA ของเว็บไซต์
- ขั้นตอนการติดตั้งใช้งานที่จะเปลี่ยนการกำหนดค่าระบบคลาวด์ของเว็บไซต์
- หากการสร้างประกอบด้วยขั้นตอนที่ยาวและต่อเนื่องกัน 2-3 ขั้นตอน Bazel อาจช่วยได้ไม่มากนัก คุณจะได้รับความเร็วมากขึ้นด้วยการแบ่งขั้นตอนที่ยาวออกเป็นเป้าหมายย่อยๆ ที่แยกกัน ซึ่ง Bazel สามารถเรียกใช้แบบขนานได้
ชุดฟีเจอร์ของ Bazel มีความเสถียรเพียงใด
ฟีเจอร์หลัก (กฎ C++, Java และ Shell) มีการใช้งานอย่างกว้างขวางภายใน Google จึงได้รับการทดสอบอย่างละเอียดและมีการเปลี่ยนแปลงน้อยมาก ในทำนองเดียวกัน เราทดสอบ Bazel เวอร์ชันใหม่กับเป้าหมายหลายแสนรายการทุกวันเพื่อค้นหาการถดถอย และเราจะเผยแพร่เวอร์ชันใหม่หลายครั้งในแต่ละเดือน
กล่าวโดยย่อคือ Bazel ควรทำงานได้ตามปกติ ยกเว้นฟีเจอร์ที่ทำเครื่องหมายเป็นเวอร์ชันทดลอง การเปลี่ยนแปลงกฎที่ไม่ใช่การทดสอบจะเข้ากันได้กับเวอร์ชันก่อนหน้า ดูรายการสถานะการรองรับฟีเจอร์แบบละเอียดเพิ่มเติมได้ในเอกสารสนับสนุน
ไบนารีของ Bazel มีความเสถียรเพียงใด
ภายใน Google เราดูแลให้มั่นใจว่า Bazel จะไม่ขัดข้อง ซึ่งควร ใช้กับฐานของโค้ดโอเพนซอร์สของเราด้วย
ฉันจะเริ่มใช้ Bazel ได้อย่างไร
โปรดดูหัวข้อเริ่มต้นใช้งาน
Docker แก้ปัญหาการทำซ้ำไม่ได้ใช่ไหม
Docker ช่วยให้คุณสร้างแซนด์บ็อกซ์ที่มีรุ่นระบบปฏิบัติการที่แน่นอนได้อย่างง่ายดาย เช่น Ubuntu 12.04, Fedora 21 ซึ่งจะช่วยแก้ปัญหาการทำซ้ำสำหรับสภาพแวดล้อมของระบบ นั่นคือ "ฉันต้องใช้ /usr/bin/c++ เวอร์ชันใด"
Docker ไม่ได้จัดการการทำซ้ำในส่วนที่เกี่ยวข้องกับการเปลี่ยนแปลงในซอร์สโค้ด การเรียกใช้ Make ด้วย Makefile ที่เขียนไม่สมบูรณ์ภายในคอนเทนเนอร์ Docker อาจยังคงให้ผลลัพธ์ที่คาดเดาไม่ได้
ภายใน Google เราจะเช็คอินเครื่องมือลงในการควบคุมแหล่งที่มาเพื่อให้สามารถสร้างซ้ำได้ ด้วยวิธีนี้ เราจึงสามารถตรวจสอบการเปลี่ยนแปลงเครื่องมือ ("อัปเกรด GCC เป็น 4.6.1") ด้วยกลไกเดียวกับการเปลี่ยนแปลงไลบรารีพื้นฐาน ("แก้ไขการตรวจสอบขอบเขตใน OpenSSL")
ฉันจะสร้างไบนารีสำหรับการติดตั้งใช้งานใน Docker ได้ไหม
Bazel ช่วยให้คุณสร้างไบนารีแบบสแตนด์อโลนที่ลิงก์แบบคงที่ใน C/C++ และไฟล์ JAR แบบรวมตัวเองสำหรับ Java ได้ ซึ่งทำงานโดยมีส่วนที่ขึ้นอยู่กับระบบ UNIX ปกติเพียงเล็กน้อย จึงควรติดตั้งภายในคอนเทนเนอร์ Docker ได้อย่างง่ายดาย
Bazel มีข้อกำหนดในการจัดโครงสร้างโปรแกรมที่ซับซ้อนมากขึ้น เช่น โปรแกรม Java ที่ใช้ชุดไฟล์ข้อมูล หรือเรียกใช้โปรแกรมอื่นเป็นกระบวนการย่อย คุณสามารถแพ็กเกจสภาพแวดล้อมดังกล่าวเป็นไฟล์เก็บถาวรแบบสแตนด์อโลน เพื่อให้สามารถนำไปใช้ในระบบต่างๆ รวมถึงอิมเมจ Docker ได้
ฉันสร้างอิมเมจ Docker ด้วย Bazel ได้ไหม
ได้ คุณใช้กฎ Docker ของเราเพื่อสร้างอิมเมจ Docker ที่ทำซ้ำได้
Bazel จะทำให้บิลด์ของฉันทำซ้ำได้โดยอัตโนมัติไหม
สำหรับไบนารี Java และ C++ จะใช้ได้ หากคุณไม่เปลี่ยน Toolchain หากมีขั้นตอนการบิลด์ที่เกี่ยวข้องกับสูตรที่กำหนดเอง (เช่น การเรียกใช้ไบนารีผ่านสคริปต์เชลล์ภายในกฎ) คุณจะต้องระมัดระวังเป็นพิเศษดังนี้
- อย่าใช้การอ้างอิงที่ไม่ได้ประกาศ การดำเนินการในแซนด์บ็อกซ์ (–spawn_strategy=sandboxed, เฉพาะใน Linux) จะช่วยค้นหาการขึ้นต่อกันที่ไม่ได้ประกาศ
- หลีกเลี่ยงการจัดเก็บการประทับเวลาและรหัสผู้ใช้ในไฟล์ที่สร้างขึ้น ไฟล์ ZIP และไฟล์ที่เก็บอื่นๆ มีแนวโน้มที่จะเกิดปัญหานี้เป็นพิเศษ
- หลีกเลี่ยงการเชื่อมต่อกับเครือข่าย การดำเนินการในแซนด์บ็อกซ์ก็ช่วยได้เช่นกัน
- หลีกเลี่ยงกระบวนการที่ใช้ตัวเลขสุ่ม โดยเฉพาะอย่างยิ่งการข้ามผ่านพจนานุกรมจะมีการสุ่มในภาษาโปรแกรมหลายภาษา
คุณมีรุ่นไบนารีไหม
ได้ คุณดูไบนารีรุ่นล่าสุดและอ่านนโยบายการเผยแพร่ได้
ฉันใช้ Eclipse/IntelliJ/XCode Bazel ทำงานร่วมกับ IDE อย่างไร
สำหรับ IntelliJ โปรดดูปลั๊กอิน IntelliJ ที่มี Bazel
สำหรับ XCode โปรดดู Tulsi
สำหรับ Eclipse ให้ดูปลั๊กอิน E4B
สำหรับ IDE อื่นๆ โปรดดูบล็อกโพสต์เกี่ยวกับวิธีการทำงานของปลั๊กอินเหล่านี้
ฉันใช้ Jenkins/CircleCI/TravisCI Bazel ทำงานร่วมกับระบบ CI ได้อย่างไร
Bazel จะแสดงรหัสออกที่ไม่ใช่ 0 หากการเรียกใช้บิลด์หรือการทดสอบล้มเหลว และ นี่ควรเพียงพอสำหรับการผสานรวม CI ขั้นพื้นฐาน เนื่องจาก Bazel ไม่จำเป็นต้องมีการสร้างที่สะอาดเพื่อให้ถูกต้อง ระบบ CI จึงไม่ควรได้รับการกำหนดค่าให้ล้างข้อมูลก่อนเริ่มการเรียกใช้การสร้าง/การทดสอบ
ดูรายละเอียดเพิ่มเติมเกี่ยวกับรหัสออกได้ในคู่มือผู้ใช้
เราคาดหวังฟีเจอร์ใดได้บ้างในอนาคตของ Bazel
ฉันใช้ Bazel สำหรับโปรเจ็กต์ INSERT LANGUAGE HERE ได้ไหม
Bazel ขยายได้ ทุกคนสามารถเพิ่มการรองรับภาษาใหม่ๆ ได้ รองรับหลายภาษา โปรดดูรายการคำแนะนำในสารานุกรมการสร้างและรายการที่ครอบคลุมมากขึ้นใน awesomebazel.com
หากต้องการพัฒนาส่วนขยายหรือดูวิธีการทำงานของส่วนขยาย โปรดดูเอกสารประกอบสำหรับการขยาย Bazel
ฉันจะร่วมสนับสนุนโค้ดเบสของ Bazel ได้ไหม
เหตุใดจึงไม่พัฒนาทุกอย่างแบบเปิด
เรายังคงต้องปรับโครงสร้างอินเทอร์เฟซระหว่างโค้ดสาธารณะใน Bazel กับส่วนขยายภายในของเราอยู่บ่อยครั้ง ซึ่งทำให้การพัฒนาแบบเปิดทำได้ยาก
คุณเปิดซอร์ส Bazel เสร็จแล้วใช่ไหม
การเปิดซอร์ส Bazel ยังอยู่ระหว่างการดำเนินการ โดยเฉพาะอย่างยิ่ง เรายังคงดำเนินการเกี่ยวกับโอเพนซอร์สต่อไปนี้
- การทดสอบหน่วยและการทดสอบการผสานรวมหลายรายการ (ซึ่งจะช่วยให้การส่งแพตช์ง่ายขึ้น)
- การผสานรวม IDE อย่างเต็มรูปแบบ
นอกเหนือจากโค้ดแล้ว เรายังต้องการให้การตรวจสอบโค้ด การติดตามข้อบกพร่อง และการตัดสินใจด้านการออกแบบทั้งหมดเกิดขึ้นแบบสาธารณะ โดยมีชุมชน Bazel เข้ามาเกี่ยวข้องด้วย เรายังไม่พร้อมที่จะดำเนินการดังกล่าว ดังนั้นการเปลี่ยนแปลงบางอย่างจะปรากฏในที่เก็บ Bazel โดยไม่มีคำอธิบายที่ชัดเจน แม้จะไม่มีความโปร่งใสเช่นนี้ แต่เราก็ต้องการสนับสนุนนักพัฒนาแอปภายนอกและทำงานร่วมกัน ดังนั้นเราจึงเปิดโค้ด แม้ว่าการพัฒนาบางส่วนจะยังคงเกิดขึ้นภายใน Google โปรดแจ้งให้เราทราบหากมีสิ่งใดที่ไม่ชัดเจนหรือไม่สมเหตุสมผลเมื่อเราเปลี่ยนไปใช้โมเดลแบบเปิด
มีส่วนใดของ Bazel ที่จะไม่มีการโอเพนซอร์สไหม
ได้ โค้ดเบสบางส่วนผสานรวมกับเทคโนโลยีเฉพาะของ Google หรือเรากำลังหาข้ออ้างที่จะกำจัดโค้ดเบสเหล่านั้น (หรืออาจเป็นทั้ง 2 อย่างรวมกัน) โค้ดส่วนนี้ไม่พร้อมใช้งานบน GitHub และน่าจะไม่มีทางเป็นแบบนั้น
ฉันจะติดต่อทีมได้อย่างไร
คุณติดต่อเราได้ที่ bazel-discuss@googlegroups.com
ฉันจะรายงานข้อบกพร่องได้ที่ไหน
เปิดปัญหาใน GitHub
คำว่า "Blaze" ในโค้ดเบสหมายถึงอะไร
นี่คือชื่อภายในของเครื่องมือ โปรดเรียก Blaze ว่า Bazel
เหตุใดโปรเจ็กต์อื่นๆ ของ Google (Android, Chrome) จึงใช้เครื่องมือบิลด์อื่นๆ
ก่อนที่จะเปิดตัวเวอร์ชันแรก (Alpha) Bazel ไม่พร้อมใช้งานภายนอก ดังนั้นโปรเจ็กต์โอเพนซอร์ส เช่น Chromium และ Android จึงไม่สามารถใช้งานได้ นอกจากนี้ การที่ไม่มีการรองรับ Windows ในตอนแรกยังเป็นปัญหาในการสร้างแอปพลิเคชัน Windows เช่น Chrome เนื่องจากโปรเจ็กต์มีการพัฒนาและมีความเสถียรมากขึ้น Android Open Source Project จึงอยู่ระหว่างการย้ายข้อมูลไปยัง Bazel
"Bazel" ออกเสียงอย่างไร
ออกเสียงเหมือนกับ "basil" (สมุนไพร) ในภาษาอังกฤษแบบสหรัฐอเมริกาว่า "BAY-zel" ออกเสียงคล้ายกับคำว่า "hazel" IPA: /ˈbeɪzˌəl/