Bazel-Lib 使用教程
1. 项目介绍
Bazel-Lib 是一个由 Aspect 提供的 Bazel 辅助库,旨在帮助开发者更高效地编写 BUILD 文件和 Starlark 宏/规则。它包含了一系列基础的 Bazel 规则和实用函数,可以作为构建规则集和 BUILD 文件的基础工具。Bazel-Lib 依赖于 Bazel-Skylib,并且在理论上,这些实用工具可以被上游到 Bazel-Skylib,但由于该项目的范围较窄,且难以获得审查 PR 的关注,因此 Bazel-Lib 作为一个独立的模块提供。
2. 项目快速启动
使用 Bzlmod 安装
如果你使用 Bazel 6 并启用了 Bzlmod,可以在你的 MODULE.bazel
文件中添加以下内容:
bazel_dep(name = "aspect_bazel_lib", version = "2.8.1")
使用 WORKSPACE 安装
如果你使用的是传统的 WORKSPACE 文件,可以在你的 WORKSPACE 文件中添加以下内容:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "aspect_bazel_lib",
sha256 = "688354ee6beeba7194243d73eb0992b9a12e8edeeeec5b6544f4b531a3112237",
strip_prefix = "bazel-lib-2.8.1",
url = "https://github.com/aspect-build/bazel-lib/releases/download/v2.8.1/bazel-lib-v2.8.1.tar.gz",
)
load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "aspect_bazel_lib_register_toolchains")
# 必需的 bazel-lib 依赖
aspect_bazel_lib_dependencies()
# 注册 bazel-lib 工具链
aspect_bazel_lib_register_toolchains()
3. 应用案例和最佳实践
案例1:使用 Bazel-Lib 简化 BUILD 文件
Bazel-Lib 提供了许多实用函数和规则,可以帮助你简化复杂的 BUILD 文件。例如,你可以使用 expand_template
规则来生成配置文件,而不需要在分析阶段手动处理 mtree 规范。
load("@aspect_bazel_lib//lib:expand_template.bzl", "expand_template")
expand_template(
name = "config_file",
template = "config.tpl",
out = "config.txt",
substitutions = {
"{{KEY}}": "value",
},
)
案例2:使用 Bazel-Lib 管理工具链
Bazel-Lib 还提供了工具链管理的功能,可以帮助你更方便地注册和管理工具链。例如,你可以使用 aspect_bazel_lib_register_toolchains
来注册 Bazel-Lib 提供的工具链。
load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_register_toolchains")
aspect_bazel_lib_register_toolchains()
4. 典型生态项目
Bazel-Lib 作为 Aspect 提供的 Bazel 辅助库,与 Aspect 的其他 Bazel 规则和工具紧密集成。以下是一些典型的生态项目:
- Bazel-Skylib: Bazel 的基础库,提供了许多常用的 Starlark 函数和规则。
- Aspect Build: Aspect 提供的其他 Bazel 规则和工具,如
rules_nodejs
、rules_docker
等。
通过使用 Bazel-Lib,你可以更高效地构建和管理复杂的 Bazel 项目,同时与其他 Aspect 提供的工具和规则无缝集成。