Skip to content

开发态 HMR 配置

weapp.hmr 用来控制开发态更新时的“稳定性 vs 速度”取舍,也可以打开更细的终端诊断与结构化 profile 输出。本页覆盖:

  • weapp.hmr.sharedChunks
  • weapp.hmr.runtime
  • weapp.hmr.touchAppWxss
  • weapp.hmr.logLevel
  • weapp.hmr.profileJson

weapp.hmr.runtime

  • 类型'classic' | 'stateful-experimental'
  • 默认值'classic'
  • 适用场景:在微信开发者工具中更新原生 Page、原生 Component 或 wevu Vue SFC 时,保留当前页面实例、路由参数、输入和可序列化 data/setup ref。
ts
import { defineConfig } from 'weapp-vite/config'

export default defineConfig({
  weapp: {
    hmr: {
      runtime: 'stateful-experimental',
    },
  },
})

stateful-experimental 目前只支持微信小程序平台。它使用 Vite bundled dev graph 和微信 App Service 内的增量补丁协议,JavaScript/Vue 安全更新会在现有实例上替换方法并恢复状态。CSS、静态资源、JSON/配置变化、模块边界不兼容、补丁积压超过保留上限或补丁执行失败时,会回退到完整构建并通过 wx.reLaunch 恢复当前 route/query。

使用前请确认:

  • 微信开发者工具已开启服务端口,并在项目设置中启用热重载。
  • project.private.config.jsonsetting.compileHotReLoadtrue
  • 这是实验能力;需要完全沿用既有写盘/刷新语义时保持默认 classic
  • 状态恢复只覆盖可序列化的小程序 data 和 wevu setup ref;定时器、网络连接、原生句柄等副作用仍应由应用生命周期管理。

weapp.hmr.sharedChunks

  • 类型'full' | 'auto' | 'off'
  • 默认值'auto'
  • 适用场景:开发态 HMR 时控制共享 chunk 的重建策略。
ts
import { defineConfig } from 'weapp-vite/config'

export default defineConfig({
  weapp: {
    hmr: {
      sharedChunks: 'auto',
    },
  },
})

取舍说明:

  • full:每次更新都重新产出全部 entry,最稳但最慢。
  • auto:只在共享 chunk 可能被覆盖时回退到 full,是默认折中方案。
  • off:仅更新变更 entry,最快,但共享 chunk 导出关系复杂时更容易出现开发态不一致。

建议:

  • 普通项目保持默认 auto
  • 遇到“开发态偶发错乱、刷新后恢复正常”的共享 chunk 问题时,优先尝试 full
  • 只有在你确认项目结构简单且极度在意 dev 重建速度时,再考虑 off

weapp.hmr.touchAppWxss

  • 类型boolean | 'auto'
  • 默认值'auto'
  • 适用场景:开发态构建结束后,额外触碰 app.wxss,触发微信开发者工具的热重载。
ts
import { defineConfig } from 'weapp-vite/config'

export default defineConfig({
  weapp: {
    hmr: {
      touchAppWxss: 'auto',
    },
  },
})

行为说明:

  • true:总是启用。
  • false:关闭。
  • auto:检测到安装 weapp-tailwindcss 时启用。

适用建议:

  • 如果你在开发者工具里经常遇到样式更新不稳定、必须手动刷新,优先检查这一项。
  • 若项目未使用 weapp-tailwindcss 且样式热更新已经稳定,可保持默认或显式关闭。

weapp.hmr.logLevel

  • 类型'default' | 'concise' | 'verbose'
  • 默认值'default'
  • 适用场景:控制 HMR 终端日志的详细程度。
ts
import { defineConfig } from 'weapp-vite/config'

export default defineConfig({
  weapp: {
    hmr: {
      logLevel: 'concise',
    },
  },
})

行为说明:

  • default:只输出总耗时等基础信息,适合日常开发。
  • concise:输出关键阶段耗时,适合定位“哪一类更新慢”。
  • verbose:输出更完整的阶段诊断,适合排查 HMR 链路异常。

建议:

  • 日常保持 default
  • 只有在定位 HMR 慢、共享 chunk 回退或 DevTools 热重载不稳定时,再临时提高到 conciseverbose

weapp.hmr.profileJson

  • 类型boolean | string
  • 默认值false
  • 适用场景:输出 HMR 结构化 profile,方便后续脚本、AI 或报告工具分析。
ts
import { defineConfig } from 'weapp-vite/config'

export default defineConfig({
  weapp: {
    hmr: {
      profileJson: '.tmp/weapp-vite-hmr-profile.jsonl',
    },
  },
})

行为说明:

  • false:不输出结构化 profile。
  • true:使用默认 profile 输出路径。
  • 字符串:写入指定 JSONL 文件路径。

TIP

当你需要把 HMR 诊断交给 AI 或 CI 侧脚本复盘时,优先开启 profileJson,再结合 logLevel: 'concise'verbose 缩小问题范围。

关联阅读

Released under the MIT License.