Каталог карт Bazel, расположенный за пределами `src` для` build`
Я понятия не имею о Bazel или о том, как он работает, но мне нужно решить эту проблему, которая в конечном итоге сводилась к тому, что bazel не копировал определенный каталог в сборку.
Я провел рефакторинг кода, чтобы сначала попытаться прочитать определенный ключ (jwk) из каталога. При запуске всегда файл не найден. Я думаю, что Базел не копирует
private-keys
каталог (который находится на том же уровне) в
build
.
Project/
|-- private-keys\
|-- src/
| |-- //other directories
| |-- index.ts
|
|-- package.json
|-- BUILD.bazel
Есть объект сопоставления для копирования каталогов внутри
src
Я пробовал использовать
../private-keys
есть, но не сработало.
Ниже описано, как
BUILD.bazel
похоже
SOURCES = glob(
["src/**/*.ts"],
exclude = [
"src/**/*.spec.ts",
"src/__mocks__/**/*.ts",
],
)
mappings_dict = {
"api": "build/api",
....
}
ts_project(
name = "compile_ts",
srcs = SOURCES,
incremental = True,
out_dir = "build",
root_dir = "src",
tsc = "@npm//typescript/bin:tsc",
tsconfig = ":ts_config_build",
deps = DEPENDENCIES + TYPE_DEPENDENCIES,
)
ts_project(
name = "compile_ts",
srcs = SOURCES,
incremental = True,
out_dir = "build",
root_dir = "src",
tsc = "@npm//typescript/bin:tsc",
tsconfig = ":ts_config_build",
deps = DEPENDENCIES + TYPE_DEPENDENCIES,
)
_mappings = module_mappings(
name = "mappings",
mappings = mappings_dict,
)
# Application binary and docker imaage
nodejs_image(
name = "my-service",
data = [
":compile_ts",
"@npm//source-map-support",
] + _mappings,
entry_point = "build/index.js",
templated_args = [
"--node_options=--require=source-map-support/register",
"--bazel_patch_module_resolver",
],
)
1 ответ
Команда, которая создает вашу цель, всегда запускается в отдельном каталоге. Чтобы сообщить Bazel, что ему нужно скопировать некоторые дополнительные файлы, вам нужно обернуть файлы в
filegroup
цель (cf bazel docs).
Затем добавьте такую цель файловой группы в
deps
атрибут вашей цели (см. пример здесь ).
В вашем случае это будет что-то вроде
filegroup(
name = "private_keys",
srcs = glob(["private_keys/**"]),
)
ts_project(
name = "compile_ts",
srcs = SOURCES,
data = [ ":private_keys" ], # <-- !!!
incremental = True,
out_dir = "build",
root_dir = "src",
tsc = "@npm//typescript/bin:tsc",
tsconfig = ":ts_config_build",
deps = DEPENDENCIES + TYPE_DEPENDENCIES,
)
Вы также можете подключить
glob(...)
прямо в
data
атрибут, но, сделав его файловой группой, вы сможете использовать его повторно ... и сделаете вас профессионалом. :)