0

我正在尝试让规则泊坞窗nodejs_image使用 bazel 运行。

我的命令是

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 中,但我真的不知道如何解决这个问题。

4

1 回答 1

0

因此,基本上,如果您只使用copy_to_binor之类的规则js_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",
)
于 2021-11-18T20:02:09.507 回答