DEBUG.WIKI
腾讯云;让你的想法跑起来;轻量服务器 · 建站 / Docker / API;查看产品 →
野草云;香港 200Mbps 峰值;不限月流量 · BGP VPS;查看套餐 →
搬瓦工;先看线路,再选 VPS;CN2 GIA · 对应线路套餐;查看线路 →

Astro 6 的 Cloudflare 开发环境报 require_dist is not a function

Astro 6 与 Cloudflare adapter 13 重新安装后可能解析到顶层 Vite 8,引发 require_dist 错误。检查实际依赖树,保持框架与插件兼容组合。

同一个 Astro 项目重新安装依赖后,开发服务或构建阶段在 .vite/deps_ssr/ 报错,页面还没有开始处理业务请求:

TypeError: require_dist is not a function
    at CustomModuleRunner.directRequest

若工程仍使用 Astro 6 与 @astrojs/cloudflare 13,应检查实际依赖树有没有同时出现 Vite 7 和顶层 Vite 8。已有明确组合包括 Astro 6.0.8、Cloudflare adapter 13.1.3 和 @cloudflare/vite-plugin 1.30.0;加入 Tailwind 的 Vite 插件后,重新解析依赖可能把 Vite 8 放到顶层。

先看谁解析到了哪一个 Vite

在已安装依赖的原项目中,可以查看版本树:

npm ls astro @astrojs/cloudflare @cloudflare/vite-plugin vite

命令适用于 npm 工程。其他包管理器使用自己的依赖查询命令,判断依据仍是锁文件及实际安装结果。查询因为无效 peer 依赖返回非零时,也应保留它打印的版本关系,不要只看最后的退出码。

Astro 6.0.8 和对应 adapter 的依赖范围要求 Vite 7。Cloudflare 插件解析 Vite 时却可能拿到项目顶层的 Vite 8,使框架和插件在同一开发环境中使用不同主版本。package.json 中看起来兼容的范围,不能代替实际解析位置。

这条判断限定于上述旧版本组合。其他工具链正常共存的多个 Vite 副本,不一定是故障;新版 Astro 的 Vite 支持范围也可能已经变化。

对 Astro 6,保持它支持的 Vite 组合

确认是这组版本分裂后,在保留包清单和锁文件的分支上,协调 Astro、adapter、Cloudflare 插件与 Tailwind 插件的版本。npm 工程可以把下面的片段合并进原 package.json,让依赖解析保持在 Astro 6 支持的 Vite 7:

{
  "overrides": {
    "vite": "^7.3.1"
  }
}

这只是需要合并的字段,不能用它覆盖整份清单或已有的 overrides。项目若直接声明了 Vite 8,还要一并调整直接依赖,否则 npm 可能拒绝 override;若某个插件只支持 Vite 8,应选择匹配的插件版本,或把整组框架升级到支持它的组合,不能靠强制覆盖忽略 peer 约束。

随后按原项目的安装流程更新并审查锁文件,确认真正解析给 Astro 和 Cloudflare 插件的 Vite 主版本一致。无需先删除锁文件再让整个依赖树漂移,也不要手改 .vite/deps_ssr/ 里的 require_dist 或补一个空函数。

验证开发环境,也验证正式产物

停止旧开发进程后从原脚本重新启动,打开原来失败的页面,确认模块初始化完成;涉及 cookie 的页面还应实际读取和设置 cookie。再检查热更新与正常构建、预览或部署流程,不能只看终端出现 ready。

同样的错误文字也可能来自其他 CommonJS 转换问题。若依赖树并不存在这组 Vite 主版本分裂,应保留新的堆栈和预构建产物继续定位,不把本篇的版本约束套到所有 require_* is not a function 上。