我对 Bazel 还很陌生,很难找到解决方案:
假设我有这个 nodejs_binary
规则:
nodejs_binary(
name = "js_scirpt",
data = [
"@npm//some_lib",
],
entry_point = ":some_js_script.js",
)
现在我需要将 :js_script
的输出馈送到执行其他操作的 go_test
规则。顺序很重要:nodejs 规则应该首先完成,然后 go_test 使用输出。
我认为这应该可以通过将 json
文件从 nodejs_binary
写入磁盘并从 some_js_script.js
读取来实现,不过我无法控制执行顺序,也不知道如何将其传递给 go_test
规则。知道这是如何实现的吗(或者也许有更好的方法)?
最佳答案
一个dependency是 Bazel 让一件事先于另一件事发生的方法。 genrule是运行命令并获得可用输出的最简单方法。
将它们放在一起看起来像这样:
genrule(
name = "run_js_script",
tools = [
":js_script",
],
outs = [
"something.json",
],
cmd = "$(location :js_script) --output $(location something.json)",
)
go_test(
data = [
":something.json",
],
[name, srcs, deps, etc]
)
Go 代码应使用 runfiles.go找到文件的路径。
此外,节点代码应该采用命令行标志,以便目标写入其输出。如果无法做到这一点,请使用 shell 命令将输出移动到 $(location Something.json)
。
关于bazel - 将 Bazel 输出馈送到另一个 Bazel 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70193581/