用途:在保持客户端 bundle 轻量、无构建流水线的前提下,为 DSH Web 插件引入数兆级的渲染器,让重代码只在需要时加载,加载失败时优雅降级。
主要能力与做法: 一、懒加载与分包。若依赖会成倍放大客户端打包体积且仅一个功能用到,不要内联,拆成独立 chunk,由客户端在该功能渲染时动态 import。 二、把依赖打成单个自包含 ESM 文件并关闭代码分割。默认设置的打包器会把库内部动态导入拆成带内容哈希的兄弟 chunk,浏览器按相对 URL 解析,需逐一正确命名与 MIME 提供,易出错;单文件单导入可消除这类问题。 三、用宿主路由托管。在 webServer 注册前缀路由,只服务插件自身 lib 目录;lib 目录从宿主 bundle 的 import.meta.url 解析,不用 process.cwd();限定扩展名白名单(如 .js/.mjs);做包含性校验,建议用 path.relative 而非 startsWith,并处理 Windows 盘符大小写差异,越界返回 403;以 application/javascript 提供,MIME 错误会导致动态导入被拒。注意宿主路由需重启 dsh 后才生效,仅硬刷新不够,新路由 404 通常意味着未重启或安装副本过旧。 四、懒加载、缓存判定与回退。首次渲染时 import() chunk URL,缓存成功模块避免重复导入;失败不要长期缓存,可重试但需节流;导入或渲染抛错时始终渲染回退内容(如原始代码块),带状态属性并输出失败原因。 五、不可信标记先消毒。渲染器处理不可信文本时,配置严格模式并输出真实 SVG 文本而非 HTML 标签;抑制库的全局错误副作用;再用零依赖白名单对生成的 SVG 二次消毒:按 XML 解析、只接受 svg 根、忽略大小写剔除 foreignObject/script 等元素与 on*/@* 属性,并移除 href/xlink:href。 六、弹窗下的交互归属。全屏缩放/平移弹窗打开时须独占全部滚轮事件(含 Ctrl+滚轮),面板层处理器加弹窗存在检查;弹窗支持光标锚定缩放、拖拽平移、键盘快捷键、Esc/点击遮罩关闭。 七、发布。构建 chunk 提交到包内并在 files 中声明;发布说明写明宿主要重启、客户端只需刷新;针对回退路径、消毒器和宿主路由包含性各写回归测试。
限制:原文未给出具体命令、代码示例与价格信息,暂未提供。