【发布时间】: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