代码 Vite 8.3.5 的 21 条修复里有 8 条落在 bundled-dev:dev 也走打包之后,dev-only 语义得重写一遍

2026-10-31 21:06:16

Vite 8.3.5 的 21 条修复里有 8 条落在 bundled-dev:dev 也走打包之后,「dev-only」语义得重写一遍

Vite 8.3.5 于 2026-10-21 发布,包含 21 条修复,其中 8 条属于 bundled-dev,2 条属于 build 的 chunk import map,其余是 CSS、依赖与平台细节。同一天 6.x 线也发布了 6.4.5。

  • Vite CHANGELOG:https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md
  • 原文:https://www.moiu.cn/zh/blog/vite-835/

bundled-dev 是什么

bundled-dev 是 Vite 8 里在 dev 阶段也做打包的模式,替代原先逐请求的模块转换。出发点很直接:模块图大(上千个模块)时,浏览器要发上千个请求,冷启动慢;先打包能把请求数压到个位数。

代价是:一旦 dev 和 build 共用同一条打包流水线,每一条原本「只在 dev 生效」的语义都得重新实现一遍。8.3.5 里近一半修复集中在这里,正是这些语义缺口被陆续暴露出来的结果。

bundled-dev 的 8 条语义缺口

  • HMR 传播在已不再被 import 的模块处停止(#23839):删掉某条 import 之后,再编辑相关文件仍会触发更新,页面闪烁。
  • 转发的错误栈经过 bundle 的 source map 映射(#23741):不映射的话,dev 下报错的行号指的是打包产物,不是源码。
  • server.origin 应用到资源 URL(#23683):反向代理或自定义 origin 场景下,资源会 404。
  • fallback 页声明 utf-8 charset(#23846):fallback 路由下中文乱码。
  • 忽略 build.chunkImportMap(#23685):仅用于 build 的配置漏进了 dev。
  • 用户的 import.meta.env.* define 合并进 import.meta.env 对象(#23713):自定义变量在 dev 里读不到。
  • 规范化对外提供的输出文件(#23684)。
  • 处理 HMR server 未接管的 upgrade 请求上的 socket 错误(#23728)。

build 与 CSS

build 两条:处理缺失的 chunk import map(#23777);把 preload 依赖纳入 chunk import map 的哈希计算(#23793)。

CSS 一条:url() 里出现字面 % 时不再直接失败(#23676)。

其他修复

  • optimizer 回退到 yarn.lock 计算 lockfile hash(#23667)
  • 扫描 oxc.jsxInject 的 import(#23758)
  • yarn.lock 回退时跳过 patches 目录检查;nub lockfile 跳过 patches 目录哈希
  • 解析含多个 # 的 subpath imports(#23631)
  • 升级 resolve.exports 2.0.4
  • 只在路径匹配完整段时才剥离 base(#23641)
  • SSR 内联 source map 提取不再用正则(#23775)

8.3.4(2026-10-08)顺带记录

  • bundled-dev 支持 import.meta.hot.acceptExports
  • 修复 restart 期间发起的 restart 请求被丢弃
  • watcher 在做 root 检查前先规范化文件路径
  • html 不再把文件系统根目录加进 watcher

升级与排查建议

什么时候开 bundled-dev:模块图规模大到冷启动被请求数拖住时收益明显;模块数量不多的项目,默认的逐请求转换路径语义更完整,没必要切换。开之前确认版本已在 8.3.5 及以上,前面那批 HMR 传播、source map、import.meta.env 的问题都已修掉。

dev 报错行号对不上:先确认 bundle 的 source map 是否被正确映射(#23741)。若栈里指向的是打包后的位置,检查是否有自定义 sourcemap 配置覆盖了 dev 默认值;server.origin 与反向代理同时存在时,也顺带核对资源 URL 是否命中 #23683 修的那条路径。

fallback 路由中文乱码:对照 #23846,确认 fallback 页的 charset 声明已经生效,而不是被自定义 HTML 模板覆盖掉。

复制全文 生成海报 Vite 前端 构建 调试 版本升级

推荐文章

程序员茄子在线接单