当 运行ning nodejs_image 时,`Bazel 运行` 将无法在 bazel-bin 中找到静态文件依赖项

`Bazel run` won't find static file dependency in bazel-bin when running nodejs_image

我正在尝试使用 bazel 获取规则 docker nodejs_image 到 运行。

我的命令是

bazel run :image.binary

这是我的规则:

load("@npm//@bazel/typescript:index.bzl", "ts_project")
load("@io_bazel_rules_docker//nodejs:image.bzl", "nodejs_image")

ts_project(
    name = "typescript_build",
    srcs = glob([
        "src/**/*",
    ]),
    allow_js = True,
    out_dir = "build",
    deps = ["@npm//:node_modules"],
)

nodejs_image(
    name = "image",
    data = [
        ":package.json",
        ":typescript_build",
        "@npm//:node_modules",
    ],
    entry_point = "build/app.js",
)

基本上,我需要 package.json 文件,因为它包含了 Node 执行时的一些重要配置信息。如果我调用 bazel build :image 然后 grab/run 该图像,一切正常。但是如果我调用 bazel run :image 它基本上可以工作,只是它找不到 package.json.

当我检查 bazel-bin/ 文件夹时,我注意到 package.json 未包含在内,但内置的打字稿和 node_modules 包含在内。我猜是因为我没有 运行 在 package.json 上设置任何先前的规则,它没有被添加到垃圾箱,但我真的不知道如何解决这个问题。

所以,基本上,如果您只是使用像 copy_to_binjs_library 这样的规则,我认为它们的目的是帮助将静态文件放入您的 bazel-bin。

https://bazelbuild.github.io/rules_nodejs/Built-ins.html#copy_to_bin

ts_project(
    name = "typescript_build",
    srcs = glob([
        "src/**/*",
    ]),
    allow_js = True,
    out_dir = "build",
    deps = ["@npm//:node_modules"],
)

js_library(
    name = "library",
    srcs = ["package.json"],
    deps = [":typescript_build"],
)

nodejs_image(
    name = "image",
    data = [
        ":library",
        "@npm//:node_modules",
    ],
    entry_point = "build/app.js",
)