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

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


person Charlie OConor    schedule 13.01.2020    source источник


Ответы (1)


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

https://github.com/evertz/bzlgen

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

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

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

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

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

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

person Matt Mackay    schedule 13.01.2020
comment
Похоже, вы добавили функциональность в lib. Как лучше всего установить и попробовать? Я не видел руководства в README. - person Charlie OConor; 16.01.2020