【问题标题】:Bazel Watcher not Terminating Node Process (Error: Listen EADDRINUSE: address already in use :::3000)Bazel Watcher 未终止节点进程(错误:监听 EADDRINUSE:地址已在使用 :::3000)
【发布时间】:2020-04-21 03:31:45
【问题描述】:

我有一个带有nodejs_image 的 Bazel BUILD 文件:

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",
)

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

app.listen(3000, () => console.log('listening on port 3000'));

当我跑步时

ibazel run //services/server/src:server

服务器启动正常。但是当我更改一些代码并且 Bazel Watcher 重新启动时,我收到了这个错误:

Error: listen EADDRINUSE: address already in use :::3000

因此,之前的 Node.Js 进程没有被杀死,端口仍在使用中。

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

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

  • 还是 Bazel Watcher 的问题?

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

【问题讨论】:

  • 是的,关于 rules_docker 启动 docker 镜像的方式不太好,我不建议使用 nodejs_image 进行开发,而是使用 nodejs_binary。
  • 哇!那行得通!是否可以同时运行多个nodejs_binary
  • 是的,我们使用github.com/atlassian/bazel-tools/tree/master/multirun 在同一个 bazel / ibazel 命令下运行多个

标签: node.js docker bazel docker-image


【解决方案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",
)

解决了这个问题。

【讨论】:

    猜你喜欢
    • 2021-02-11
    • 2021-02-26
    • 1970-01-01
    • 2021-09-14
    • 2020-11-09
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    相关资源
    最近更新 更多