Bazel secara otomatis menghasilkan dependensi untuk ts_library

Apakah mungkin untuk membuat dependensi target bazel secara otomatis? Sepertinya harus ada cara untuk melihat impor modul dan mengetahui dependensi bazel mana yang diperlukan setidaknya dalam banyak kasus umum. Ini bisa menghemat banyak kode boilerplate.

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 = [],
)

Saya tahu ada paket untuk Java yang melakukan ini. https://github.com/johnynek/bazel-dep. Saya belum dapat menemukan apa pun untuk bahasa lain.

Jika tidak ada, menurut saya menulisnya cukup mudah. Buat file templat untuk Anda gunakan untuk membuat file BUILD yang sebenarnya. Kemudian jalankan TypeScript untuk menarik AST modul. Periksa impornya. Impor bagian ke-3 akan lebih mudah karena harus diselesaikan ke modul npm.

Untuk file lain yang mungkin ada atau tidak ada di perpustakaan ini maka mungkin ada cara untuk menanyakan paket apa yang ada di dalamnya. Itu mungkin bisa berhasil. Setiap petunjuk akan sangat dihargai.


person Charlie OConor    schedule 13.01.2020    source sumber


Jawaban (1)


Pengungkapan: Saya salah satu penulis perpustakaan ini.

https://github.com/evertz/bzlgen

Itu dapat menghasilkan file BUILD (atau, lebih tepatnya, menghasilkan perintah buildozer) untuk Lib sudut (ng_module) dan SCSS (scss_library dan scss_binary).

Saya baru saja memindahkan ini ke opensource dari repo internal kami. Cara kerjanya mirip dengan saran Anda, namun tidak menanyakan label. Ia menggunakan file atau direktori sebagai titik awal, menguraikannya menjadi AST, menanyakan AST untuk mengambil impor dan mengekspor ulang, mengubah jalur menjadi label.

Menambahkan dukungan ts_library adalah langkah logis berikutnya.

Itu tidak selalu memberi Anda file BUILD yang 100% berfungsi saat ini, tetapi itu akan memberi Anda ~80-90% dari perjalanan ke sana, dan melakukan bagian-bagian boilerplate untuk Anda.

Pendekatan lainnya adalah dengan berinteraksi dengan Gazelle API, dan memanipulasi file BUILD secara langsung.

Versi sebelumnya dari alat ini menghasilkan file BUILD dari sebuah string dan menjadi sulit untuk digunakan saat memanipulasi file dengan cara lain.

person Matt Mackay    schedule 13.01.2020
comment
Sepertinya Anda telah menambahkan fungsionalitas ke lib. Apa cara terbaik untuk menginstalnya dan mencobanya? Saya tidak melihat panduan di README. - person Charlie OConor; 16.01.2020