使用wrangler dev运行含itty-router的Cloudflare Worker时出现write EPIPE错误
Ubuntu 22.04下使用wrangler dev运行含itty-router的Cloudflare Worker时出现write EPIPE错误
问题描述
在Ubuntu 22.04系统上,使用wrangler dev(运行npm start时也出现相同问题)本地测试Cloudflare Worker,持续触发write EPIPE错误。运行基础的hello world Worker脚本无异常,但导入itty-router后启动就报错。预期Worker能正常启动本地服务器,实际出现如下错误及代码情况,需确认这是操作失误还是需上报的bug(若为bug,应提交给哪个项目)。
错误信息
username@machine:~/worker$ wrangler dev ⛅️ wrangler 3.0.0 ------------------ wrangler dev now uses local mode by default, powered by 🔥 Miniflare and 👷 workerd. To run an edge preview session for your Worker, use wrangler dev --remote Using vars defined in .dev.vars Your worker has access to the following bindings: - R2 Buckets: - R2_BUCKET: bucket ⎔ Starting local server... [mf:wrn] The latest compatibility date supported by the installed Cloudflare Workers Runtime is "2023-05-12", but you've requested "2023-05-18". Falling back to "2023-05-12"... ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ [b] open a browser, [d] open Devtools, [l] turn off local mode, [c] clear console, [x] to exit │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ /home/username/.nvm/versions/node/v20.1.0/lib/node_modules/wrangler/wrangler-dist/cli.js:30632 throw a; ^ Error: write EPIPE at afterWriteDispatched (node:internal/stream_base_commons:160:15) at writeGeneric (node:internal/stream_base_commons:151:3) at Socket._writeGeneric (node:net:946:11) at Socket._write (node:net:958:8) at writeOrBuffer (node:internal/streams/writable:399:12) at _write (node:internal/streams/writable:340:10) at Writable.write (node:internal/streams/writable:344:10) at Runtime.updateConfig (/home/username/.nvm/versions/node/v20.1.0/lib/node_modules/wrangler/node_modules/miniflare/dist/src/index.js:5120:26) at async #assembleAndUpdateConfig (/home/username/.nvm/versions/node/v20.1.0/lib/node_modules/wrangler/node_modules/miniflare/dist/src/index.js:9130:23) at async #init (/home/username/.nvm/versions/node/v20.1.0/lib/node_modules/wrangler/node_modules/miniflare/dist/src/index.js:8894:5) Emitted 'error' event on Socket instance at: at emitErrorNT (node:internal/streams/destroy:151:8) at emitErrorCloseNT (node:internal/streams/destroy:116:3) at process.processTicksAndRejections (node:internal/process/task_queues:82:21) { errno: -32, code: 'EPIPE', syscall: 'write' } Node.js v20.1.0
Worker代码
import { Router, RouterType, IRequest } from 'itty-router' export interface Env { R2_BUCKET: R2Bucket; } const router: RouterType = Router(); const get_static = async (req: IRequest, env: Env): Promise<Response> => { const url = new URL(req.url); const key = url.pathname.slice(1); const object = await env.R2_BUCKET.get(key); if (object == null) { return new Response('404, not found!', { status: 404 }); } const headers = new Headers(); object.writeHttpMetadata(headers); headers.set('etag', object.etag); return new Response(object.body, { headers }); } router.all('*', get_static); export default { async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> { return await router.handle(request, env, ctx); }, };
排查建议
- 降级Node.js版本:当前使用Node.js v20.1.0,wrangler 3.0.0对Node.js 20的适配可能不完善。切换到Node.js 18 LTS版本(长期支持版),兼容性更有保障。
- 升级wrangler:你使用的wrangler 3.0.0是早期版本,后续版本大概率修复了这类EPIPE错误。执行
npm update -g wrangler升级到最新稳定版后重试。 - 调整兼容性日期:日志显示请求的
2023-05-18兼容性日期不被当前Runtime支持,已自动回退。在wrangler.toml中显式设置compatibility_date = "2023-05-12",消除自动回退带来的潜在问题。 - 更换itty-router版本:尝试安装不同版本的itty-router(比如稳定版
itty-router@3.0.1),排查是否是版本间的兼容性冲突导致问题。
关于bug上报
如果以上步骤都无法解决问题,这属于wrangler(内置Miniflare)与itty-router的兼容性bug,应提交给wrangler项目仓库。提交时需包含:
- 系统环境(Ubuntu 22.04、Node.js版本、wrangler版本)
- 可复现的完整代码
- 完整的错误日志
- 已尝试的排查操作
内容的提问来源于stack exchange,提问作者eyager
相关产品推荐
相关产品推荐

