Каталог карт 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атрибут, но, сделав его файловой группой, вы сможете использовать его повторно ... и сделаете вас профессионалом. :)

Другие вопросы по тегам