Bug 6 · 插件宿主半不能热重载;客户端半改动必须 touch 才生效(无文档)
严重度:中 —— 每次改动都要重启宿主,且客户端改动极易被误判为「没生效」
症状
插件改完之后无法通过「刷新页面」或「等待」看到效果 —— 表现成
「我的改动没生效」,而开发者会去怀疑自己的代码。
两种改动、两种失效方式、都没有文档说明。
6a · 宿主半(lib/index.js)不能热重载
两个版本各实测一次:
改 PROBE_REV: 'rev-12' → 'rev-13',touch lib/index.js
等 9 秒后查探针 → 仍返回 rev-12
⇒ 改宿主半必须重启 harness。
6b · 客户端半(lib/client.js)改动必须 touch 文件,否则刷新是假刷新
响应头:
cache-control: public, max-age=31536000, immutable
插件 bundle 的 URL 带 rev:
{"id":"<plugin>","url":"/plugins/??<plugin>/client.js&rev=<hash>","rev":"<hash>"}
实测:
| 动作 |
rev 是否变化 |
改 lib/client.js 内容 |
❌ 不变 |
touch package.json |
❌ 不变 |
touch lib/client.js |
✅ 变 |
⇒ 只改内容不 touch,rev 不变 ⇒ URL 不变 ⇒ immutable 让浏览器一年不回源 ⇒
用户「刷新」后跑的仍是旧代码。
而服务器侧其实早就是新内容(直接 curl 该 URL 可以验证)⇒
开发者会以为是自己的代码有问题,实际是缓存。
根因
- 6a:插件宿主半在加载时被实例化一次,没有文件监听。
- 6b:客户端 bundle 的
rev 不是内容哈希的实时结果 ——
改内容不改变它,只有 touch 才改变。
而响应头是 immutable + 一年,rev 不变 ⇒ URL 不变 ⇒ 浏览器根本不回源。
(服务端本身是新的:直接 curl 该 URL 能取到新内容 —— 所以问题完全在缓存层。)
期望
touch 这一步要求应写进插件开发文档;或
- 内容变化时 rev 自动更新(毕竟它应当是内容哈希);或
- 开发模式下对插件 bundle 改为
no-cache
影响面
所有插件开发者。这条的代价不是「多敲一次命令」,而是
「服务器是新代码、浏览器跑旧代码」这个中间态——
开发者最自然的反应是去翻自己的代码找 bug,方向完全错了。
⇒ 建议至少在插件开发文档里用醒目位置写明。
被测版本:DSH Desktop 0.9.0(内核 @deepseek-ai/* = 0.1.5-rc.2) · macOS / Apple Silicon (arm64)
Bug 6 · 插件宿主半不能热重载;客户端半改动必须
touch才生效(无文档)严重度:中 —— 每次改动都要重启宿主,且客户端改动极易被误判为「没生效」
症状
插件改完之后无法通过「刷新页面」或「等待」看到效果 —— 表现成
「我的改动没生效」,而开发者会去怀疑自己的代码。
两种改动、两种失效方式、都没有文档说明。
6a · 宿主半(
lib/index.js)不能热重载两个版本各实测一次:
⇒ 改宿主半必须重启 harness。
6b · 客户端半(
lib/client.js)改动必须touch文件,否则刷新是假刷新响应头:
插件 bundle 的 URL 带 rev:
{"id":"<plugin>","url":"/plugins/??<plugin>/client.js&rev=<hash>","rev":"<hash>"}实测:
lib/client.js内容touch package.jsontouch lib/client.js⇒ 只改内容不
touch,rev 不变 ⇒ URL 不变 ⇒immutable让浏览器一年不回源 ⇒用户「刷新」后跑的仍是旧代码。
而服务器侧其实早就是新内容(直接
curl该 URL 可以验证)⇒开发者会以为是自己的代码有问题,实际是缓存。
根因
rev不是内容哈希的实时结果 ——改内容不改变它,只有
touch才改变。而响应头是
immutable+ 一年,rev 不变 ⇒ URL 不变 ⇒ 浏览器根本不回源。(服务端本身是新的:直接
curl该 URL 能取到新内容 —— 所以问题完全在缓存层。)期望
touch这一步要求应写进插件开发文档;或no-cache影响面
所有插件开发者。这条的代价不是「多敲一次命令」,而是
「服务器是新代码、浏览器跑旧代码」这个中间态——
开发者最自然的反应是去翻自己的代码找 bug,方向完全错了。
⇒ 建议至少在插件开发文档里用醒目位置写明。
被测版本:DSH Desktop
0.9.0(内核@deepseek-ai/* = 0.1.5-rc.2) · macOS / Apple Silicon (arm64)