`tanstack-start-trigger-wrapper.ts` static import of `dev-triggers.ts` crashes entire app when queue/cron handlers have `createRequire` dependencies
@TheAlexLichter 已经在做这个了。
开始于 2026年6月9日。
评估
这个 Issue 还没有评估数据。
描述
Encountered a weird interaction when using Mastra with crons and queues. Once again, I've asked Claude to help dig into this in hopes that it'll help.
Appreciate it!
Environment
void: 0.9.2vite-plus: 0.1.24@cloudflare/vite-plugin: 1.39.2- Framework: TanStack Start (Class A)
- Compatibility date:
2026-02-24
What happens
Void generates .void/tanstack-start-trigger-wrapper.ts for Class A frameworks. In dev mode this wrapper contains a static top-level import:
import { handleDevTrigger } from './dev-triggers.ts';
.void/dev-triggers.ts (also auto-generated) statically imports every queue and cron handler:
import __job0 from "/path/to/crons/briefing-tick.ts";
import __queue0 from "/path/to/queues/briefing-generation.ts";
If any queue or cron handler transitively imports a package that uses createRequire from Node's module API — in this case @mastra/core, which does so in its gateway/LSP chunks — the TanStack Start worker runner throws on every single request:
require is not defined
at runInRunnerObject (workers/runner-worker/index.js:107:3)
at Object.fetch (.void/tanstack-start-trigger-wrapper.ts:7:34)
at maybeCaptureError (workers/runner-worker/index.js:51:10)
The app is completely broken — not just the dev trigger curls, every page load returns 500.
Why
The static import forces dev-triggers.ts (and therefore all queue/cron handlers and their full dependency trees) to be evaluated at worker module initialization time, before any request is handled. In TanStack Start's workerd-based runner, createRequire from node:module exists but the function it returns throws require is not defined when invoked against CJS modules. Try-catch blocks inside @mastra/core don't help because the import itself (module evaluation) is what fails.
Expected behavior
handleDevTrigger is only needed for POST /__void/scheduled and POST /__void/queue — requests that are only issued during local dev testing. The import should not cause every other request to break.
Minimal repro
- TanStack Start project with
void≥ 0.9.x - A queue handler in
queues/that imports@mastra/core(or any package usingcreateRequirefromnode:module) - Run
pnpm devand load any page — 500 on every request
Suggested fix
Convert the static import to a lazy dynamic import, only evaluated when a dev trigger path is detected:
// In the generated tanstack-start-trigger-wrapper.ts fetch handler:
async fetch(request, env, ctx) {
const url = new URL(request.url);
if (request.method === "POST" &&
(url.pathname === "/__void/scheduled" || url.pathname === "/__void/queue")) {
const { handleDevTrigger } = await import('./dev-triggers.ts');
const res = await handleDevTrigger(request, env, ctx);
if (res) return res;
}
return serveWithAssets(request, env, await original.fetch(request, env, ctx));
},
This ensures queue/cron handlers are only loaded when actually needed, isolating their dependency trees from the critical request path.
Workaround (in use)
Created a Vite plugin to patch the generated wrapper at dev-server startup to omit the dev-triggers.ts import entirely. Dev triggers are handled via TanStack routes instead.
- 主要语言
- TypeScript
- 星标
- 149
- 派生
- 2
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
我们还没有检查这个项目的环境配置文件。先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
void-sdk/void 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 76/100
-
难度 4/5 3-5 天 新手友好度 48/100
-
难度 4/5 3-5 天 新手友好度 42/100
-
难度 3/5 1-2 天 新手友好度 57/100
-
c.env.* typed as unknown after void prepare可能重新可做 @TheAlexLichter 于 121 天前认领,目前没有进行中的 PR。 未关闭
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 78/100
melgarafael/DeskcommCRM#1812 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 84/100
prisma/prisma-cli#309 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
gregwebs/pi-quota-dispatcher#26 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 74/100
openwatersio/slackwater.xyz#124 ·
维护者通常 1 天内回复
-
agent-reported area/browser area/docs documentation good first issue hacktoberfest help wanted P2
难度 1/5 1 小时以内 新手友好度 90/100
维护者通常 2 天内回复