開始使用
只安裝服務用得到的套件。一個常見 HTTP 服務通常會用 @go-like/context、@go-like/core、@go-like/web,再挑一個能匯出原生 Fetch Handler 的 Web 框架。內部服務呼叫才需要 @go-like/client、@go-like/transport 與 @go-like/transport-http;註冊中心、設定來源和儲存後端都由應用程式明確選擇。
IMPORTANT
此 checkout 使用版本 0.0.1 的 workspace:* 套件。Manifest 版本不能證明 npm 可用;在 workspace 外安裝前,應獨立核實發布狀態。
sh
bun install --frozen-lockfile
bun run test:e2e:examples
bun run --cwd examples/vanilla-web startsh
bun add @go-like/context @go-like/core @go-like/web建立 src/main.ts:
ts
import process from "node:process"
import { background } from "@go-like/context"
import { afterStart, context, name, newApp, server, stopTimeout } from "@go-like/core"
import { signal } from "@go-like/core/node"
import type { Handler } from "@go-like/web"
import { newNodeServer, port } from "@go-like/web/node"
const handler: Handler = (request) => {
const path = new URL(request.url).pathname
return Response.json({ message: "hello from go-like", path })
}
const webServer = newNodeServer(handler, port(3000))
const app = newApp(
context(background()),
name("hello"),
server(webServer),
stopTimeout(30_000),
signal(),
afterStart(async function announceReady(ctx): Promise<void> {
await webServer.endpoint(ctx)
process.stdout.write("GO_LIKE_EXAMPLE_READY=hello\n")
})
)
await app.run()執行:
sh
bun run src/main.ts送出請求前,先等 terminal 出現 GO_LIKE_EXAMPLE_READY=hello。任何符合結構式 Server 介面的物件都能加入應用程式。@go-like/croner、@go-like/bullmq、@go-like/pino、@go-like/winston 已經把常見套件的生命週期接好,但不會複製原套件整套選項。
連線、憑證、路由和框架設定仍由應用程式建立,再把最小必要能力傳給 go-like,通常是原生物件或一個 fetch。這樣測試容易控制,關機時誰該關閉什麼也不會互相猜。