Javascript Bazel Typescript-找不到模块名称引用的ts_库

Javascript Bazel Typescript-找不到模块名称引用的ts_库,javascript,typescript,bazel,monorepo,Javascript,Typescript,Bazel,Monorepo,我有两个BazelBUILD文件: 服务器/构建 枚举/生成 我的目标是将ts_库作为服务器ts_库的依赖项从Enum导入服务器。因此,我使用了这里描述的方法:(通过module\u name和deps) 枚举BUILD文件: package(default_visibility = ["//visibility:public"]) load("@io_bazel_rules_docker//nodejs:image.bzl", "nodejs_image") load("@npm_baz

我有两个Bazel
BUILD
文件:

  • 服务器/构建
  • 枚举/生成
我的目标是将
ts_库
作为服务器
ts_库
的依赖项从Enum导入服务器。因此,我使用了这里描述的方法:(通过
module\u name
deps

枚举
BUILD
文件:

package(default_visibility = ["//visibility:public"])

load("@io_bazel_rules_docker//nodejs:image.bzl", "nodejs_image")
load("@npm_bazel_typescript//:index.bzl", "ts_library")

ts_library(
    name = "enums",
    srcs = glob(["src/index.ts"]),
    module_name = "@lbm/enums",
)
load("@io_bazel_rules_docker//nodejs:image.bzl", "nodejs_image")
load("@npm_bazel_typescript//:index.bzl", "ts_library")

ts_library(
    name = "lib",
    srcs = glob(
        include = [ "**/*.ts" ],
        exclude = [ "src/index.ts" ],
    ),
    deps = ["//enums:enums"]
)

ts_library(
    name = "main",
    srcs = [ "src/index.ts" ],
    deps = ["//enums:enums", ":lib"],
)

filegroup(
    name = "libfiles",
    srcs = ["lib"],
    output_group = "es5_sources",
)

filegroup(
    name = "mainfile",
    srcs = ["main"],
    output_group = "es5_sources",
)

nodejs_image(
    name = "server",
    data = [
        ":libfiles",
        ":mainfile",
    ],
    entry_point = ":mainfile",
)
服务器
BUILD
文件:

package(default_visibility = ["//visibility:public"])

load("@io_bazel_rules_docker//nodejs:image.bzl", "nodejs_image")
load("@npm_bazel_typescript//:index.bzl", "ts_library")

ts_library(
    name = "enums",
    srcs = glob(["src/index.ts"]),
    module_name = "@lbm/enums",
)
load("@io_bazel_rules_docker//nodejs:image.bzl", "nodejs_image")
load("@npm_bazel_typescript//:index.bzl", "ts_library")

ts_library(
    name = "lib",
    srcs = glob(
        include = [ "**/*.ts" ],
        exclude = [ "src/index.ts" ],
    ),
    deps = ["//enums:enums"]
)

ts_library(
    name = "main",
    srcs = [ "src/index.ts" ],
    deps = ["//enums:enums", ":lib"],
)

filegroup(
    name = "libfiles",
    srcs = ["lib"],
    output_group = "es5_sources",
)

filegroup(
    name = "mainfile",
    srcs = ["main"],
    output_group = "es5_sources",
)

nodejs_image(
    name = "server",
    data = [
        ":libfiles",
        ":mainfile",
    ],
    entry_point = ":mainfile",
)
但是跑步的时候

bazel run //server:server
虽然我已经设置了
module_name=“@lbm/enums”
并将
//enums
添加到
deps
,但我得到了以下错误:

INFO: Analyzed target //server:server (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
ERROR: /minimal-bazel-monorepo/server/BUILD:13:1: Compiling TypeScript (devmode) //server:main failed (Exit 1)
server/src/index.ts:2:27 - error TS2307: Cannot find module '@lbm/enums'.

2 import { Constants } from '@lbm/enums';
                            ~~~~~~~~~~~~

Target //server:server failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 0.207s, Critical Path: 0.09s
INFO: 0 processes.
Error: Cannot find module '@lbm/enums/src/index'. Please verify that the package.json has a valid "main" entry
你可以自己试试:

编辑#1 从“@lbm/enums”的
import{Constants}更新import语句后
从'@lbm/enums/src'导入{Constants},如所述,我得到以下错误:

INFO: Analyzed target //server:server (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
ERROR: /minimal-bazel-monorepo/server/BUILD:13:1: Compiling TypeScript (devmode) //server:main failed (Exit 1)
server/src/index.ts:2:27 - error TS2307: Cannot find module '@lbm/enums'.

2 import { Constants } from '@lbm/enums';
                            ~~~~~~~~~~~~

Target //server:server failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 0.207s, Critical Path: 0.09s
INFO: 0 processes.
Error: Cannot find module '@lbm/enums/src/index'. Please verify that the package.json has a valid "main" entry
  • 由于生成文件位于/enums dir而不是/enums/src中,因此正确的TS导入如下所示:
    从'@lbm/enums/src'导入{Constants}
    或者可以考虑将这个构建文件移动到/eNME/SRC DIR,那么TS导入现在可以被保留。
  • 我从示例中注意到,您使用了纱线工作区。不幸的是,rules_nodejs现在不支持它们,因此最好在根目录中有一个package.json

  • 这完全有道理!但是我现在又犯了一个错误(我已经更新了我的问题)。纱线工作区将很快得到支持吗?(因为我不喜欢只有一个
    package.json
    )让我感到困惑。monorepo的全部目的不是要有多个包吗。。。我已经尝试过了,但是错误仍然存在。我无法修复它,尽管我已经删除了工作区(相同的错误)。你介意添加更多细节吗?如果您愿意,您还可以在这里创建一个pull请求:看起来纱线工作区仍然存在。也许你忘了推?我现在推它