我目前正在开发一个具有相当大的工作区文件的monorepo。
现在,我注意到我的测试规则之一,就是在更新我的测试时没有重新构建它的依赖规则。以下是其中的一个例子:
load("@npm//@grafana/toolkit:index.bzl", "grafana_toolkit")
load("@build_bazel_rules_nodejs//:index.bzl", "copy_to_bin")
APPLICATION_DEPS = glob(
[
# My updated test file is included in this glob
"src/**/*",
],
) + [
"my-config-files.json"
]
RULE_DEPS = [
"@npm//@grafana/data",
"@npm//@grafana/ui",
"@npm//emotion",
"@npm//fs-extra",
]
copy_to_bin(
name = "bin_files",
srcs = APPLICATION_DEPS,
)
grafana_toolkit(
name = "test",
args = [
"plugin:test",
],
chdir = package_name(),
data = RULE_DEPS + [
":bin_files",
],
)
然后,我有一个名为“something.test.ts
”的文件。我运行bazel run :test
,我的测试可能会显示我失败了,我发现了问题并修复了它。问题是,下次我运行我的测试时,我从输出中看到它仍然失败,因为它正在运行旧的测试而不是新的测试。
问题
我通常通过运行bazel clean
来解决陈旧文件不更新的问题。问题是做bazel clean
意味着我清理了所有的东西。这使得重新运行所有的构建步骤花费了相当长的时间。我想知道是否有一种方法可以指定我只清理缓存的一个子集(例如,可能只有我的bin_files
规则的输出)。那样的话,我只会重建我想要重建的东西,而不是重新开始。
发布于 2022-07-06 15:43:17
实际上,我找到了一种非常快速和简单的方法来完成我最初要求的事情,基本上就是转到bazel-bin
目录,并删除我想要重新运行的任何规则的输出。因此,在这种情况下,我可以删除bazel目录中的bin_files
输出,然后再运行我的bin_files
规则。
话虽如此,我认为@ahumsky可能是正确的,如果你需要这样做,它更可能是一个错误与其他东西。在我的例子中,我运行的是规则的构建版本,而不是规则的测试版本。因此,清理缓存中的一个子集与我最初的问题并没有任何关系。
https://stackoverflow.com/questions/72325164
复制相似问题