build(deps): vite 5.4.21 → 8.3.4(含 plugin-vue 6)+ 修 CSS 拆块导致的主题/悬停回归
安全:消掉 2 条 high。vite 跨 3 个 major(5→8,rollup→rolldown); @vitejs/plugin-vue 5.2.4 → 6.0.10(peer 覆盖 vite ^5||^6||^7||^8); 锁文件同步刷新使 nanoid / postcss / source-map-js 三条一并消解。 🔴 升级引入的 CSS 顺序回归(本轮实测发现并修复,不是理论风险): rolldown 把 Element Plus 基础样式拆成独立 css-*.css 块,且 index.html 中 排在入口 CSS **之后**;旧 rollup 把 EP 与 global.css 合并在同一入口 CSS, EP 在前、项目在后。两者覆盖语句特异性相同 ⇒ 谁在后谁赢 ⇒ 新顺序下反被 EP 压过。 取证:生产旧包 index-CVAb-2kd.css 内 EP 规则 @27768 < 项目覆盖 @57506(旧=正确); 新包 index-rMbH9bHe.css(先)vs css-CNpL_Sag.css(后)。 · --el-color-primary 退回 #409eff ⇒ 登录按钮由深藏青变 Element 亮蓝; · 文字型按钮 hover 底退回不透明 #f5f7fa ⇒ 此前修好的「白底白字」缺陷复现。 修法=让覆盖与加载顺序无关(⛔ 不是调顺序,顺序由打包器决定不可靠): · :root → html:root (0,0,1,1 > 0,0,1,0) · .el-button.is-text:not(.is-disabled):hover/:focus 加 :root 前缀(4 → 5 个类级) 验证(四级对照,全部可复现): 1. 顺序单变量实验(两组页面除 <link> 顺序外完全相同): 修复前 A=SAME? → primary #1a3a5c vs #409eff、hover rgba(...) vs #f5f7fa(DIFF); 修复后两种顺序计算样式完全相同(PASS)。 2. 与生产旧包(旧 vite5 构建)逐项比对 computed style:primary / light-3 / 主按钮底色 / hover 底色 全部 SAME。 3. 登录页截图 sha256 与生产旧包**逐字节相同**(f5052aa7260b7b47)—— 修复前为 9f074bb1c44329b3。 4. 真 chromium 加载构建产物(vite preview):/login、/admin 首屏、 成绩管理、选手管理全部 0 console error / 0 pageerror; TDZ 静态门禁 38 文件 PASS。 产物:入口 index-DTFvE02d.js · 157 资源 · 73 个 .gz(两次构建 hash 一致=可复现)。 全量电池 57 步:退出码 0 · FAIL 0 · SKIP 0 · 未运行 0(1 项 N/A 为数据前提不成立)。
This commit is contained in:
1474
package-lock.json
generated
1474
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -22,8 +22,8 @@
|
||||
"vue-router": "^4.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "^5.0.0",
|
||||
"@vitejs/plugin-vue": "^6.0.10",
|
||||
"unplugin-vue-components": "^32.1.0",
|
||||
"vite": "^5.0.0"
|
||||
"vite": "^8.3.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,18 @@
|
||||
=========================================================== */
|
||||
|
||||
/* ============ CSS 变量定义 ============ */
|
||||
:root {
|
||||
/* 🔴 选择器必须是 html:root 而不是 :root(2026-10-21 R188 实测):
|
||||
Element Plus 默认主题在同一 `:root` 上定义 `--el-color-primary:#409eff`,
|
||||
两者特异性相同 ⇒ **谁后加载谁赢**。
|
||||
· vite 5(rollup):EP 基础样式与 global.css 合并在同一个入口 CSS 内,
|
||||
EP 在前、本文件在后 ⇒ 覆盖生效(生产旧包 index-CVAb-2kd.css 实测:
|
||||
EP 规则 @27768 < 本文件覆盖 @57506)。
|
||||
· vite 8(rolldown):EP 基础样式被拆成独立的 css-*.css 块,且
|
||||
index.html 里排在入口 CSS **之后** ⇒ EP 默认值反过来赢,
|
||||
主色退回 #409eff(登录按钮由深藏青变亮蓝)。
|
||||
html:root = (0,0,1,1) 高于 :root = (0,0,1,0),与加载顺序无关。
|
||||
⛔ 不要改回 :root —— 除非能证明 EP 样式一定排在前面。 */
|
||||
html:root {
|
||||
/* 主色调:深蓝色,用于导航栏、按钮等关键元素 */
|
||||
--primary-color: #1a3a5c;
|
||||
/* 辅助色:金色,用于强调、高亮、获奖标识等 */
|
||||
@@ -371,7 +382,14 @@ input:-webkit-autofill {
|
||||
本规则只改背景、不动文字颜色,故不会影响任何页面的文字配色设计。
|
||||
新增页面自动继承此保障,无需逐页排查。
|
||||
=========================================================== */
|
||||
.el-button.is-text:not(.is-disabled):hover,
|
||||
.el-button.is-text:not(.is-disabled):focus {
|
||||
/* 🔴 选择器前缀 :root 是**必需**的(2026-10-21 R188 实测),不能省:
|
||||
本规则与 EP 的 .el-button.is-text:not(.is-disabled):hover 同为 4 个类级,
|
||||
旧构建靠「本文件在后」取胜;vite 8 把 EP 样式拆块后排在入口 CSS 之后,
|
||||
同特异性下 EP 反过来赢 ⇒ hover 底变回不透明近白 #f5f7fa ⇒
|
||||
「白底白字」缺陷复现(该缺陷此前已修复,见上方说明)。
|
||||
前缀 :root 使特异性升到 5 个类级 ⇒ 与顺序无关,重新压过 EP。 */
|
||||
:root .el-button.is-text:not(.is-disabled):hover,
|
||||
:root .el-button.is-text:not(.is-disabled):focus {
|
||||
background-color: rgba(120, 130, 145, 0.16);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user