Environment
Nitro: 3.0.260311-beta
Rolldown: 1.0.0-rc.10
Node.js: v25.2.1
Bun: 1.3.11
Nitro config:
import { defineNitroConfig } from "nitropack/config";
export default defineNitroConfig({
preset: "cloudflare-module",
builder: "rolldown",
serverDir: "server",
});
Reproduction
I can provide a minimal reproduction repo if needed. The local reproduction is very small:
server/lib/cjs-builtin-require.cjs
const { EventEmitter } = require("events");
module.exports = {
EventEmitter,
Client: class Client extends EventEmitter {},
};
server/lib/cjs-builtin-require.mjs
import client from "./cjs-builtin-require.cjs";
export default client;
server/routes/api/test.ts
import { defineEventHandler } from "h3";
import builtin from "../../lib/cjs-builtin-require.mjs";
export default defineEventHandler(() => {
return {
ok: true,
clientName: builtin.Client.name,
eventEmitterType: typeof builtin.EventEmitter,
};
});
Build and run:
bunx nitro build
bunx wrangler dev --config .output/server/wrangler.json
curl http://127.0.0.1:8787/api/test
Describe the bug
With Nitro main, preset: "cloudflare-module", and builder: "rolldown", a module graph like this fails at runtime:
- ESM route imports an ESM wrapper
- the ESM wrapper imports a CJS file
- the CJS file does
require("events")
The build succeeds, but the generated worker output still contains a runtime require("events") path, so the worker fails at runtime.
The minimal issue is that Nitro currently produces an invalid worker/runtime output for ESM -> CJS -> require(node builtin) in cloudflare-module + rolldown.
Additional context
The generated route chunk contains:
const { EventEmitter } = __require("events");
So the build succeeds, but the worker crashes at runtime because require is not available in that environment.
Logs
HTTP/1.1 500
Content-Length: 57
Content-Type: application/json; charset=utf-8
{
"error": true,
"status": 500,
"unhandled": true
}
Wrangler log:
Error: Calling `require` for "events" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.
at .../.output/server/_runtime.mjs
at .../.output/server/_routes/api/test.mjs
Environment
Nitro:
3.0.260311-betaRolldown:
1.0.0-rc.10Node.js:
v25.2.1Bun:
1.3.11Nitro config:
Reproduction
I can provide a minimal reproduction repo if needed. The local reproduction is very small:
server/lib/cjs-builtin-require.cjsserver/lib/cjs-builtin-require.mjsserver/routes/api/test.tsBuild and run:
Describe the bug
With Nitro
main,preset: "cloudflare-module", andbuilder: "rolldown", a module graph like this fails at runtime:require("events")The build succeeds, but the generated worker output still contains a runtime
require("events")path, so the worker fails at runtime.The minimal issue is that Nitro currently produces an invalid worker/runtime output for
ESM -> CJS -> require(node builtin)incloudflare-module+rolldown.Additional context
The generated route chunk contains:
So the build succeeds, but the worker crashes at runtime because
requireis not available in that environment.Logs
Wrangler log: