39209ef5916dd9aba50bab01561dbc1c72b6b78a
mirror-to-gitee / mirror (push) Successful in 3s
问题:点「产品功能 / 核心能力 / 界面预览 / 官方文档」跳转后图标不变蓝。 根因:VitePress 的 isActive() 只比较 path,不看 hash。nav 里 「首页 /」「产品功能 /#features」「核心能力 /#core」的路径部分都是 `/`, 默认逻辑要么把首页和当前锚点同时点亮,要么只亮首页。 改动 - 新增 .vitepress/theme/nav-anchor.ts 接管首页内锚点项的激活判定: 用 data-anchor-active 属性标记,规则为 在首页且有 hash → 只有 hash 匹配项亮;在首页无 hash → 只有「首页」亮; 不在首页 → 清标记交回 VitePress 默认逻辑 - 样式侧用 html.portal-nav-home 限定压制默认 active 的作用域, 只影响首页,不影响 /projects/ 与 /about 的正常高亮 - 导航「项目」加 activeMatch: '^/projects/', 使 /projects/iotlcm/ 等详情页也保持高亮 - MutationObserver 监听导航 DOM 变化(SPA 切换、主题切换会重建) 踩的坑 - Layout 是函数式组件,onMounted 在其中无效(Vue 报"no active component instance"),改用 nextTick 调度 - 初版用 hashOf(a) 判空来识别「首页」,但 /projects/ 与 /about 也没有 hash, 被误判成首页项一起点亮;改为判断 href 解析后是否为 '/' - 抑制规则最初没加作用域,导致非首页页面的正常 active 也被压成黑字 验证(8 个场景逐个实测) 首页顶部→首页 / 四个锚点→各自高亮 / 项目页→项目 / 关于页→关于 / iotLCM 详情→项目;构建 13 页 274 引用 0 失效
雪羊科技开源项目门户
开源项目门户站源码。当前收录 iotLCM(物联网卡全生命周期管理平台)、秀杰 DTU 管理平台、XiuAdmin(中后台开发框架)。
- 站点框架:VitePress 1.6(与 iotLCM 的文档站同构)
- 产物:纯静态文件
- 许可:Apache-2.0
目录
.
├── data/projects.ts # 项目注册表 —— 门户唯一项目清单来源
├── pages/
│ ├── index.md # 门户首页
│ ├── projects/index.md # 全部项目
│ ├── projects/<id>/index.md # 各项目详情页
│ ├── guide/portal-deploy.md # 门户自身的构建与部署
│ └── about.md # 关于、许可、贡献说明
├── .vitepress/theme/components/ # 项目卡片与列表组件
├── scripts/check-registry.mjs # 注册表与详情页一致性校验
├── deploy/docker-compose.yml # 容器部署编排
└── Dockerfile # 多阶段构建镜像
新增一个项目
两步,不需要改动站点其它部分:
- 在
data/projects.ts里加一条记录(名称、定位、说明、代码仓、许可证、技术栈、状态、详情页路径、子页面) - 写
pages/projects/<id>/index.md详情页
首页卡片、项目列表页、侧边栏都会自动带上新项目。
构建前会自动校验注册表与详情页目录是否一一对应,不一致直接报错:
npm run check
本地开发
npm ci
npm run dev # http://127.0.0.1:5173
构建
npm run build # 产物在 .vitepress/dist/
部署
docker compose -f deploy/docker-compose.yml up -d --build
默认发布在宿主机 127.0.0.1:8020。站点资源前缀由 SITE_BASE 决定:
| 形态 | 参数 | 访问方式 |
|---|---|---|
| 子路径(过渡,无独立域名) | /www/(默认) |
由已有网关转发 /www/ 到本容器 |
| 独立域名 | / |
域名根路径 |
SITE_BASE=/ docker compose -f deploy/docker-compose.yml up -d --build
详见 门户部署。
Description
Languages
TypeScript
31.3%
CSS
28.2%
Vue
24.4%
JavaScript
14.4%
Dockerfile
1.7%