Начало работы
Устанавливайте только нужные части. Обычному HTTP-сервису достаточно @go-like/context, @go-like/core, @go-like/web и Web-фреймворка с нативным Fetch handler. Для внутренних вызовов добавьте @go-like/client, @go-like/transport и @go-like/transport-http; registry, источник конфигурации и Store выбираются явно.
IMPORTANT
Этот checkout использует пакеты workspace:* версии 0.0.1. Версия manifest не доказывает доступность в npm; перед установкой вне workspace проверьте публикацию отдельно.
bun install --frozen-lockfile
bun run test:e2e:examples
bun run --cwd examples/vanilla-web startbun add @go-like/context @go-like/core @go-like/webСоздайте src/main.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()Запустите сервис:
bun run src/main.tsПеред отправкой запросов дождитесь строки GO_LIKE_EXAMPLE_READY=hello. К приложению можно подключить любой объект, структурно реализующий интерфейс Server. @go-like/croner, @go-like/bullmq, @go-like/pino и @go-like/winston уже связывают популярные библиотеки с жизненным циклом, но не дублируют все их настройки.
Соединения, учётные данные, маршруты и настройки фреймворка по-прежнему создаёт приложение. В go-like передаётся минимальная возможность — обычно нативный объект или функция fetch. Так тесты остаются управляемыми, а при завершении понятно, кто закрывает каждый ресурс.