为什么我在 .bzl 文件中使用“local_repository”?然后它告诉我名称“local_repository”未定义?

wil*_*.zk 1 bazel

我想通过 bazel 构建 Envoy?我在我的电脑中手动下载一些包,然后我将 http_archive 更改为 local_repository,但它告诉我名称“local_repository”未定义。local_repository 是否需要任何加载操作?

local_repository 可以在 WORKSPACE 中使用,但不能在我的 .bzl 文件中使用

WORKSPACE:
workspace(name = "envoy")
load("//bazel:api_repositories.bzl", "envoy_api_dependencies")
envoy_api_dependencies()
load("//bazel:repositories.bzl", "GO_VERSION", "envoy_dependencies")
load("//bazel:cc_configure.bzl", "cc_configure")
envoy_dependencies()
`repositories.bzl`:
local_repository(
    name = "com_google_protobuf",
    path = "/home/user/com_google_protobuf",
)
Run Code Online (Sandbox Code Playgroud)

dms*_*dms 5

local_repository工作区规则,所以我认为它在WORKSPACE文件之外不可用。

如果你想local_repository从一个.bzl文件中调用,你可以在那里定义一个函数,使用native,然后从 调用它WORKSPACE,例如:

# repositories.bzl
def deps():
  native.local_repository(
    name = "com_google_protobuf",
    path = "/home/user/com_google_protobuf",
  )
Run Code Online (Sandbox Code Playgroud)
# WORKSPACE
load("//:repositories.bzl", "deps")

deps()
Run Code Online (Sandbox Code Playgroud)

例如,我在grpc项目中看到过这种模式。