概览
Fuchsia 项目遵循官方 Bazel .bzl 样式指南,但有一些例外情况。本页面上的指南是对常见 Bazel 样式指南和最佳实践的补充。
.bzl 文件最常用于定义规则、宏和函数,对此有额外的指导。
本页面是 Bazel 样式指南和最佳实践的一部分。
公开范围
加载可见性
与 .gni 文件不同,.bzl 文件支持加载可见性,以限制可从中加载这些文件的位置。默认情况下,没有任何限制。
始终在 .bzl 文件中指定 visibility:
对于并非专门用于软件包外部的任何
.bzl文件,请使用visibility("private")。- 尤其是当软件包包含公共和私有
.bzl文件的混合时,将后者放在private/目录中可能很有意义。Bazel 具有限制在此类目录中加载文件的机制。
- 尤其是当软件包包含公共和私有
否则,请使用
visibility([...])指定可以使用它的软件包(目录)。
加载 visibility 使用的语法与目标 visibility 不同:
仅路径等同于
:__pkg__。/...后面的路径等同于:__subpackages__。
对于真正要在整个代码库中使用的非常常见的目标,可以使用 "//..."。请勿使用公开可见性 (visibility("public")) [SHAC 错误]。不过,在大多数情况下,一组顶级和/或二级目录(例如 "//src/..." 和 "//sdk/lib/...")就足够了。
符号可见性
在 .bzl 文件中,为符号名称添加下划线前缀,以限制对 .bzl 文件内的访问,从而防止其他文件(即使在同一软件包 [目录] 中)使用。
请勿创建 defs.bzl 文件
虽然您可能会看到它们(尤其是在第三方代码库中),但定义或导出不确定是否会一起使用的多个符号(通常在 defs.bzl 文件中)是一种反模式。请参阅限制每个 .bzl 文件导出的符号。在所有情况下,请选择更具描述性的文件名。