Skip to content

v1.3.0 · 换肤时不再有组件掉队

Choose a tag to compare

@virtualman333 virtualman333 released this 16 Sep 17:03
· 24 commits to main since this release

v1.3.0 · 换肤时不再有组件掉队

npm i vui-uniapp@1.3.0

这一版修的是什么

check:theme 建立时就记下 12 处历史硬编码色值作为「只减不增」的棘轮基线。
它们正是「颜色不走主题变量」这个问题的活样本:用户改 uni.scss 换肤之后,
这几处不会跟着变,而且不报错。

基线现在归零,抓到的是:

  • 5 个组件各写了一遍 #f2f3f5 分隔线(主题层本来就有 $vui-bg-color-hover);
    棘轮归零后又抓出第 13 处(vui-card 的 border-top)—— 旧基线按
    组件名|字面量 计数,同一个组件里的第二处被同一条白名单顺带豁免了;
  • vui-scrollbar 的 #c0c4cc 就是 $vui-text-color-placeholder,值完全相同;
  • vui-voice-input 的 rgba(228,61,51,0.9) 就是 rgba($vui-error, .9);
  • vui-code 与 vui-markdown 各写了一份逐字相同的代码块配色
    (#282c34 / #abb2bf)—— 现在抽成 $vui-code-bg / $vui-code-color 一对变量;
  • vui-calendar 的禁用态文字 #e4e7ed 主题层没有等值变量,新增 $vui-text-color-disabled。

顺带修掉两个会让「走主题变量」自我拆台的缺陷

  1. inject-theme.py 只注入、不更新('$vui-primary:' in body 即跳过):
    主题层新增的变量永远进不了已有 48 个组件的兜底块,而 check:sfc 单独编译
    组件样式块(不预置 uni.scss)—— 老组件一旦引用新变量就报 Undefined variable。
    现改为与 THEME_BLOCK 不一致就刷新(幂等,重复跑输出「已是当前版本: 48」)。
  2. check-theme.js 把变量派生的色值判成硬编码:rgba($vui-error, .9) 第一个
    通道解析出 NaN → 判为非中性 → 报违规。也就是说「把硬编码改成变量」反而会让
    校验变红,等于把人逼回硬编码。现在识别 $ 通道并单独计数。

现在是一律失败,没有豁免通道

check-theme.js 从 inject-theme.py 的 THEME_BLOCK 解析变量清单,逐个组件比对
「兜底块变量清单 == 主题层清单」(此前无人保证,也不报错);解析不出来时
直接失败而不是打一行警告 —— 检查自己静默消失是本仓最贵的一类回归。

BASELINE 现在是空对象。这不是关掉检查:它是无条件失败,从此没有白名单。

自测

  • npm run check:all 8 道校验全绿(含 SFC / 类型 / 产物一致性 / tarball 清单)。
  • 7 处单缺陷注入逐条命中对应结论,含一条反向对照:把「硬编码 + 基线豁免」原样
    重建 → 必须仍然放行,证明棘轮归零没有变成「一律报错」。源码 sha256 逐字节还原。
  • prepublishOnly 已随本次发布跑过完整校验链。