Bazel автоматически генерирует зависимости для ts_library - PullRequest
0 голосов
/ 13 января 2020

Можно ли автоматически сгенерировать зависимости цели 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 файл. Затем запустите машинопись, чтобы вытащить AST модуля. Посмотрите импорт. Импортировать 3-ю часть будет проще, поскольку они должны разрешаться в модуль npm.

Для других файлов, которые могут присутствовать или отсутствовать в этой библиотеке, может существовать способ запросить, в каком пакете они живут. Это может сработать. Любые указатели будут очень цениться.

1 Ответ

2 голосов
/ 14 января 2020

Раскрытие: я являюсь одним из авторов этой библиотеки.

https://github.com/evertz/bzlgen

Может генерировать файлы BUILD (или, точнее, генерирует buildozer команды) для библиотек Angular (ng_module) и S CSS (scss_library и scss_binary).

Я только что переместил это в opensource из нашего внутреннего репо. Он работает аналогично тому, что вы предлагаете, но не запрашивает метки. Он использует файл или каталог в качестве отправной точки, анализирует в AST, запрашивает AST для извлечения импорта и реэкспорта, конвертирует пути в метки.

Добавление поддержки ts_library является логическим следующим шагом.

В настоящее время он не всегда дает вам 100% работающий файл BUILD, но он проделает вам ~ 80-90% пути и сделает за вас стандартные элементы.

Другой подход будет взаимодействовать с API Gazelle и напрямую манипулировать файлами BUILD.

Предыдущая версия этого инструмента генерировала файлы BUILD из строки, и с ними было трудно работать при манипулировании файлами. другими способами.

...