拓冰建站拓冰建站
首页 / 资讯中心 / 正文

如何在effect-smol中用NodeRuntime和BunRuntime双启动Effect程序:新手完整指南

如何在effect-smol中用NodeRuntime和BunRuntime双启动Effect程序新手完整指南【免费下载链接】effect-smolCore libraries and experimental work for Effect v4项目地址: https://gitcode.com/GitHub_Trending/ef/effect-smoleffect-smol是 Effect v4 的核心库仓库其中的effect/platform-node与effect/platform-bun两个平台包分别提供NodeRuntime和BunRuntime。两者用同一个runMain函数即可把你的 Effect 程序分别启动在 Node.js 或 Bun 上——一套业务代码两种运行时优雅关闭和错误报告自动搞定。本文带你快速掌握这套双启动机制。 一分钟认识 NodeRuntime 与 BunRuntime对比项NodeRuntimeBunRuntime所属包effect/platform-nodeeffect/platform-bun源码位置packages/platform-node/src/NodeRuntime.tspackages/platform-bun/src/BunRuntime.ts核心入口NodeRuntime.runMain(program)BunRuntime.runMain(program)运行环境要求Node.js ≥ 18Bun两个包的 API 形状完全一致都只暴露一个runMain函数把 Effect 程序作为进程主纤程main fiber运行并自动接管进程生命周期。这也是双启动能成立的关键——你的程序本身不需要感知底层是 Node 还是 Bun。 快速开始一行代码启动安装对应运行时包后入口代码极其简单示例摘自官方示例 ai-docs/src/01_effect/06_running/10_run-main.tsimport { NodeRuntime } from effect/platform-node import { BunRuntime } from effect/platform-bun import { Effect, Layer } from effect // 你的主程序以 Layer 形式组织 const program Layer.launch(Worker) // 在 Node.js 中启动 NodeRuntime.runMain(program) // 在 Bun 中启动API 完全相同 BunRuntime.runMain(program)实际项目中通常只会在部署时二选一生产服务器用 Node追求启动速度和本地开发体验选 Bun业务代码零改动。 runMain 背后替你做了什么深入看共享实现 packages/platform-node-shared/src/NodeRuntime.ts它基于核心包的 Runtime.makeRunMain 构建帮你处理了四件烦心事信号处理自动监听SIGINT/SIGTERMCtrlC 或服务管理器停止信号优雅关闭收到信号时不直接杀进程而是中断主纤程让forkScoped派生的子纤程和所有带作用域的资源连接、定时器、文件句柄按顺序清理退出码管理成功为 0失败非 0且收到信号后一定会退出不会挂死错误报告默认以友好的 pretty 格式打印错误日志失败原因一目了然。优雅关闭示例官方示例中的 Worker 用Effect.forkScoped启动了一个每 1 秒打印日志的循环。按下 CtrlC 时信号 → 中断主纤程 → 子纤程随作用域一起终止 → 进程干净退出不会残留僵尸任务——这正是传统process.on(SIGINT)手写清理逻辑最容易出错的地方而runMain帮你兜底了。⚙️ 可选配置3 个参数按需微调runMain接受一个可选配置对象参见 NodeRuntime.ts 源码注释disableErrorReporting: true——如果应用已有集中式错误上报可关闭自动错误日志避免重复打印teardown——自定义最终化逻辑例如根据退出原因生成不同的退出码或在退出前执行收尾动作disablePrettyLoggerBun 文档中说明——避免自动注入 pretty 日志器方便接入自己的日志体系。 相关源码与文档路径Node 运行时实现packages/platform-node/src/NodeRuntime.tsBun 运行时实现packages/platform-bun/src/BunRuntime.ts两者共享的信号处理核心packages/platform-node-shared/src/NodeRuntime.ts运行时抽象层makeRunMain / Teardownpackages/effect/src/Runtime.ts双启动官方示例ai-docs/src/01_effect/06_running/10_run-main.ts若需从外部框架如 Hono调用 Effect可改用 ManagedRuntime示例见 ai-docs/src/04_integration/10_managed-runtime.ts✅ 小结在 effect-smol 中实现 Node/Bun 双启动只需记住三点同一份runMainAPI、信号驱动的优雅关闭、可选的teardown定制退出行为。把程序写成 Layer入口交给NodeRuntime.runMain或BunRuntime.runMain进程生命周期就交给框架了。【免费下载链接】effect-smolCore libraries and experimental work for Effect v4项目地址: https://gitcode.com/GitHub_Trending/ef/effect-smol创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门