问题描述
我在我的应用程序中使用 NodeJS 中的 Bazel 规则。目的是简单地 lint 一组文件并在 linting 失败时使构建失败。我目前遇到的是,尽管存在 lint 错误,但构建还是成功的。
这是我的 BUILD
文件的一部分:
load("@npm//htmlhint:index.bzl","htmlhint")
filegroup(
name = "htmldata",srcs = glob(["**/*.html"]),)
htmlhint(
name = "compile",data = [
"htmlhint.conf","//:htmldata"
],args = [
"--config","htmlhint.conf","$(locations //:htmldata)"
]
)
我首先加载提示库,然后为所有我想要 lint 的 HTML 文件定义一个文件组。之后,我使用规则及其数据和参数。
为了运行构建,我通过 npm 脚本使用默认选项:bazel build //...
解决方法
您的构建文件按预期工作。不幸的是它没有做你想要的,因为当你从 @npm//htmlhint:index.bzl
加载宏时,它会设置 nodejs 二进制文件,它是一个可运行的目标,这意味着它只会在构建时创建运行文件 + 可执行文件。在这种情况下,构建将不会运行库。
有几个选项可以做你想做的事:
- 使用
htmlhint_test
宏创建测试目标。 - 创建一个自定义规则,该规则将使用 nodejs 二进制文件来构建一些人工制品。在这种情况下,您可以强制构建失败。
不过,我建议使用第一种方法,因为如果 htmlhint
是一个 linting 工具,它不会产生任何有意义的输出,最好将其作为测试套件的一部分。
将 compile
目标设置为测试目标需要执行以下操作
diff --git a/BUILD.bazel b/BUILD.bazel
index 4e58ac5..3db5dbb 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -1,11 +1,11 @@
-load("@npm//htmlhint:index.bzl","htmlhint")
+load("@npm//htmlhint:index.bzl","htmlhint_test")
filegroup(
name = "htmldata",srcs = glob(["**/*.html"]),)
-htmlhint(
+htmlhint_test(
name = "compile",data = [
"htmlhint.conf",
然后您可以使用 bazel test //...
进行检查。
如果您想查看输出,只需使用 compile
bazel run //path/to:compile
目标