代码 Vue 3.6 rc.11:v-memo 在 Vapor 模板里被静默忽略,只在 dev 给一句警告

2026-11-10 21:07:38

Vue 3.6.0-rc.11:Vapor 开始警告那些它悄悄忽略的行为

Vue 3.6.0-rc.11 发布于 10 月 10 日,距 rc.10 十天。它仍是预发布版本,releases 页面上最新的稳定版依然标注为 3.5.43。3.6 的 changelog 里只有一条 feature、两条性能条目,其余是大量 Vapor 修复。其中几条的意义在于:Vapor 开始主动告诉你,它在哪些地方和 vdom 渲染器的行为不一样。

唯一的 feature:跨渲染器边界的 Transition

Features 下只有一条条目,#15758:Vapor 的 slot 内容现在可以在 vdom 的 `` 里过渡。这属于 interop 方向的工作。在混合应用里,先转换叶子组件时,“用 vdom 组件包住 Vapor 组件的 slot 内容并加过渡”是很自然的写法,而在此之前这条路径需要绕开。

围绕它的几条修复指向同一件事:interop 的 v-show 现在遵循元素挂载生命周期(#15806);由 render 函数直接调用的 vapor slot 按其 outlet 渲染(#15743);多根 vdom slot 内容在 Vapor transition 根之下保持转发(#15754)。

为被忽略的行为加上警告

三条条目新增了 dev 期警告:

  • v-memo 在 Vapor 模板里被忽略,编译器现在会对此发出警告(#15788)。
  • 从 Vapor 模板访问 globalProperties,会在运行时警告(#15789)。
  • 元素上的 @vue:* 生命周期钩子被忽略,现在也会警告(#15807)。

rc.10 那篇文章曾依据一份第三方指南,把 v-memo 和 globalProperties 列在未支持特性里。现在 changelog 至少确认了 v-memo 的情况:编译器是忽略它,而不是编译失败。以前能编译、能跑的模板现在照样能跑,只是少了你原本依赖的 memo 化。

有警告总比静默好,但它是 dev-only 的信号。所以把一个组件转成 Vapor 之前,先把测试套件跑在 warnings-as-errors 下。

v-memo 这类场景可以提前自查,先摸清有多少模板在用:

grep -rn "v-memo" --include="*.vue" src/

测试侧则把 [Vue warn] 直接升级成失败:

// vitest.config.js
export default defineConfig({
test: {
onConsoleLog(log) {
if (/\[Vue warn\]/.test(log)) throw new Error(log)
},
},
})

更严格的编译期检查

另外几条编译器条目把错误提前了:

  • 没有 `` 的 Vapor 脚本会被拒绝(#15790)。在普通 script 上写 vapor 属性,现在会直接变成编译错误,而不是“半能用”。
  • 对 const 绑定使用 v-model(#15779)、对 v-for 或 v-slot 作用域变量使用 v-model(#15810),都会被报出来。
  • setup 组件的查找顺序与 vdom 对齐(#15786),setup 绑定可以遮蔽已知全局。

v-model 这两条最需要留意。给 const 或循环变量赋值在哪种渲染器下都是 bug,但一个直接生成 DOM 代码的编译器必须决定为它生成什么,报出来是更安全的选择。

值得扫一遍的对齐修复

  • 表单:select 的值在 option 更新之后同步(#15827);checkbox 的值变化在 model effects 中被跟踪(#15815);input 的 value 在其它的 props 之后设置(#15722);symbol 类型的 input value 像 vdom 一样字符串化(#15830)。
  • Hydration:transition 根之下转发的 slot(#15812);空的 once 分支锚点(#15821);app mounted 钩子现在在 hydration 结束后执行(#15753)。
  • 异步组件:变更的输入会转发给延迟的异步组件(#15809)。
  • 命名空间:SVG 与 MathML 的动态组件根在其各自的命名空间中创建(#15797)。
  • HMR:在 HMR 重渲染之后重新应用根链状态(#15750)。
  • 工具链:组件 props 与 v-bind 对象里的 asset URL 导入得到处理(#15799)。

怎么用这个版本

  • 生产项目:留在 3.5.x。稳定线没有变化,一个还在修 select 同步和 v-model 赋值顺序的版本不适合上线。
  • 在混合应用里试 Vapor 的团队:在分支上升级到 rc.11 并盯住 console。三条新警告相当于一次免费的审计,能列出哪些模板依赖了 Vapor 会跳过的特性。
  • 库作者:让组件在两种渲染器下都跑一遍。
  • Nuxt 用户:与 Vapor 的集成在这里没有验证过。

来源:

复制全文 生成海报 Vue Vapor 前端 迁移

推荐文章

程序员茄子在线接单