Bazel สร้างการพึ่งพาสำหรับ ts_library โดยอัตโนมัติ

เป็นไปได้ไหมที่จะสร้างการพึ่งพาของเป้าหมาย Bazel โดยอัตโนมัติ ดูเหมือนว่าควรจะมีวิธีดูการนำเข้าโมดูลและรู้ว่าจำเป็นต้องมีการพึ่งพา bazel ใดอย่างน้อยก็ในหลาย ๆ กรณีทั่วไป สิ่งนี้สามารถประหยัดโค้ดสำเร็จรูปได้มาก

load("@npm_bazel_typescript//:index.bzl", "ts_library")
ts_library(
    name = "lib",
    srcs = glob(include = ["**/*.ts"]),
    # Is there any easy way to generate this list?
    deps = [],
)

ฉันรู้ว่ามีแพ็คเกจสำหรับ Java ที่ทำสิ่งนี้ https://github.com/johnynek/bazel-dep ฉันไม่พบสิ่งใดในภาษาอื่นเลย

หากไม่มีอยู่ฉันคิดว่ามันอาจจะตรงไปตรงมาในการเขียน สร้างไฟล์เทมเพลตเพื่อให้คุณไม่ต้องสร้างไฟล์ BUILD จริง จากนั้นรัน typescript เพื่อดึง AST ของโมดูล ตรวจดูการนำเข้า. การนำเข้าส่วนที่ 3 จะง่ายกว่าเนื่องจากควรแก้ไขเป็นโมดูล npm

สำหรับไฟล์อื่นๆ ที่อาจจะอยู่ในไลบรารี่นี้หรือไม่ก็ได้ อาจมีวิธีในการสืบค้นว่าไฟล์เหล่านั้นอยู่ในแพ็คเกจใด นั่นอาจจะได้ผล พอยน์เตอร์ใด ๆ จะได้รับการชื่นชมอย่างมาก


person Charlie OConor    schedule 13.01.2020    source แหล่งที่มา


คำตอบ (1)


การเปิดเผยข้อมูล: ฉันเป็นหนึ่งในผู้เขียนห้องสมุดนี้

https://github.com/evertz/bzlgen

มันสามารถสร้างไฟล์ BUILD (หรือพูดให้ชัดเจนกว่านั้นคือสร้างคำสั่ง buildozer) สำหรับ libs เชิงมุม (ng_module) และ SCSS (scss_library และ scss_binary)

ฉันเพิ่งย้ายสิ่งนี้ไปยัง opensource จาก repo ภายในของเรา ทำงานในลักษณะเดียวกันกับที่คุณแนะนำ แต่จะไม่ค้นหาป้ายกำกับ โดยจะใช้ไฟล์หรือไดเร็กทอรีเป็นจุดเริ่มต้น แยกวิเคราะห์ AST ค้นหา AST เพื่อดึงข้อมูลการนำเข้าและส่งออกซ้ำ แปลงเส้นทางเป็นป้ายกำกับ

การเพิ่มการสนับสนุน ts_library เป็นขั้นตอนต่อไปแบบลอจิคัล

ในปัจจุบัน มันไม่ได้ช่วยให้คุณได้ไฟล์ BUILD ที่ใช้งานได้ 100% เสมอไป แต่จะทำให้คุณได้ประมาณ 80-90% ของวิธีการนั้น และทำส่วนสำเร็จรูปให้กับคุณ

อีกวิธีหนึ่งคือการโต้ตอบกับ API ของ Gazelle และจัดการไฟล์ BUILD โดยตรง

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

person Matt Mackay    schedule 13.01.2020
comment
ดูเหมือนว่าคุณได้เพิ่มฟังก์ชันการทำงานให้กับ lib วิธีที่ดีที่สุดในการติดตั้งและทดลองใช้คืออะไร? ฉันไม่เห็นคำแนะนำใน README - person Charlie OConor; 16.01.2020