运行nodejs_image时,"Bazel run"在 bazel-bin 中找不到静态文件依赖项



我正在尝试使用bazel运行一个规则dockernodejs_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,然后获取/运行该图像,一切都会正常工作。但如果我调用bazel run :image,它基本上会工作,只是找不到package.json

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

所以,基本上,如果你只使用像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",
)

最新更新