![](/img/trans.png)
[英]Expand a Bazel rule output's directory into a flat output of another rule
[英]Feed Bazel output to another Bazel rule
我對 Bazel 很陌生,很難找到解決方案:
假設我有這個nodejs_binary
規則:
nodejs_binary(
name = "js_scirpt",
data = [
"@npm//some_lib",
],
entry_point = ":some_js_script.js",
)
現在我需要將來自:js_script
的 output 饋送到執行其他操作的go_test
規則。 順序很重要:nodejs 規則應該首先完成,然后 go_test 使用 output。
我認為這應該可以通過將json
文件從nodejs_binary
寫入磁盤並從some_js_script.js
讀取它來實現,盡管我無法控制執行順序並且我不知道如何將其傳遞給go_test
規則。 關於這是如何可能的任何想法(或者也許有更好的方法)?
我對nodejs_binary
或go_test
不太了解,但您可能想要的是測試通過data
屬性依賴於 nodejs 二進制文件:
https://github.com/bazelbuild/rules_go/blob/master/go/core.rst#go-test
https://docs.bazel.build/versions/main/build-ref.html#data
go_test(
name = "go_default_test",
srcs = ["some_test.go"],
data = [":js_script"],
)
js_scirpt
將在 go 測試構建之前構建,並在測試執行時提供給測試。
見https://github.com/bazelbuild/rules_go#how-do-i-access-testdata
依賴是使用 Bazel 使一件事先於另一件事發生的方式。 genrule是運行命令並提供 output 的最簡單方法。
將它們放在一起看起來像這樣:
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來查找文件的路徑。
此外,節點代碼應該為目的地使用命令行標志來寫入其 output。 如果它不能這樣做,則使用 shell 命令將 output 移動到$(location something.json)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.