簡體   English   中英

將 Bazel output 饋送到另一個 Bazel 規則

[英]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_binarygo_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM