Bazel Watcher 未终止节点进程(错误:听 EADDRINUSE:地址已在使用中 :::3000)

flo*_*olu 5 node.js docker bazel docker-image

我有一个带有以下内容的 Bazel BUILD 文件nodejs_image

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

load("@npm_bazel_typescript//:index.bzl", "ts_library")
ts_library(
    name = "lib",
    srcs = glob(
        include = ["**/*.ts"],
        exclude = ["**/*.spec.ts"]
    ),
    deps = [
        "//packages/enums/src:lib",
        "//packages/hello/src:lib",
        "@npm//faker",
        "@npm//@types/faker",
        "@npm//express",
        "@npm//@types/express",
        "@npm//cors",
    ],
)

load("@io_bazel_rules_docker//nodejs:image.bzl", "nodejs_image")
nodejs_image(
    name = "server",
    data = [":lib"],
    entry_point = ":index.ts",
)
Run Code Online (Sandbox Code Playgroud)

启动一个简单的 Express Node.Js 服务器:

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

load("@npm_bazel_typescript//:index.bzl", "ts_library")
ts_library(
    name = "lib",
    srcs = glob(
        include = ["**/*.ts"],
        exclude = ["**/*.spec.ts"]
    ),
    deps = [
        "//packages/enums/src:lib",
        "//packages/hello/src:lib",
        "@npm//faker",
        "@npm//@types/faker",
        "@npm//express",
        "@npm//@types/express",
        "@npm//cors",
    ],
)

load("@io_bazel_rules_docker//nodejs:image.bzl", "nodejs_image")
nodejs_image(
    name = "server",
    data = [":lib"],
    entry_point = ":index.ts",
)
Run Code Online (Sandbox Code Playgroud)

当我跑

ibazel run //services/server/src:server
Run Code Online (Sandbox Code Playgroud)

服务器启动得很好。但是当我更改一些代码并且 Bazel Watcher 重新启动时,我收到此错误:

Error: listen EADDRINUSE: address already in use :::3000
Run Code Online (Sandbox Code Playgroud)

因此,之前的 Node.Js 进程并未终止,端口仍在使用中。

  • 我是否必须在我的 Node.Js 应用程序中处理终止?

  • 或者是否有其他方法可以使用 Bazel Watcher 运行 Node.Js 代码?

  • 还是 Bazel Watcher 的问题?

你可以自己试一下:https : //github.com/flolude/minimal-bazel-monorepo/tree/f23b960b57a94abbb5cbc13853b3e8ec4a1997ab

flo*_*olu 1

正如@Toxicable所说,我已经改为nodejs_image这样nodejs_binary

load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary")
nodejs_binary(
    name = "server",
    data = [":lib"],
    entry_point = ":index.ts",
)
Run Code Online (Sandbox Code Playgroud)

这解决了问题。