西电浪潮俱乐部官网的现代重写版:Astro + TypeScript + Tailwind CSS。
当前:MVP 开发中,仅本地预览,不部署、不 push 远程。
上一代:ISC-XDU/Website(旧 Website/ 目录,行行不动)
- Node.js 22.x(参见
.nvmrc,已实测 Node 24 兼容) - npm 10+
- Git 2.30+
# 1. 切到项目根目录
cd D:\MyFile\CODE\MiniMaxCode\InspurWeb\website-v2
# 2. 安装依赖(首次)
npm install
# 3. 启动开发服务器
npm run dev
# → http://localhost:4321
# 4. 构建静态产物
npm run build
# → dist/
# 5. 预览构建产物
npm run preview
# → http://localhost:4321(指向 dist/)npm run type-check # TypeScript 类型检查
npm run lint # ESLint
npm run format # Prettier 格式化website-v2/
├── public/ # 静态资源(不走构建)
│ ├── img/ # 从旧 Website/img/ 复制
│ └── .well-known/ # SSL 验证(仅本地参考)
├── src/
│ ├── components/ # 组件
│ ├── content/ # Markdown 内容(活动/技术组/致谢)
│ ├── data/ # JSON 数据(成员/站点配置/导航)
│ ├── layouts/ # 布局
│ ├── pages/ # 路由(6 个页面)
│ ├── scripts/ # GSAP 插件注册 + 共享工具
│ ├── styles/ # 全局样式
│ └── lib/ # 工具函数
├── scripts/ # 一次性脚本(成员数据迁移等)
├── docs/ # 设计与实施计划文档
├── astro.config.mjs
├── tailwind.config.ts
├── tsconfig.json
└── package.json
使用 GSAP 3 三个插件(自 2024-05 Webflow 收购后全部 100% 免费):
| 插件 | 作用 | 使用位置 |
|---|---|---|
ScrollTrigger |
滚动到视口触发入场 / 滚动驱动动画 | 全站 data-reveal 元素;StatsBar 数字滚动进度 |
SplitText |
官方字符级拆字 | Hero「浪潮er」标题;3 段 H2 字符级联入场 |
MorphSVGPlugin |
SVG path 形变 | Hero 下划线「直线→波浪」;StatsBar 角标 hover |
- 集中注册:
src/scripts/gsap-setup.ts暴露initGSAP()(幂等),各组件按需调用 - 滚动入场统一入口:
src/components/scripts/RevealOnScroll.astro[data-reveal]元素用ScrollTrigger.batch触发淡入上浮[data-split-title]元素用 SplitText 拆字符 + ScrollTrigger 字符级联- 严格遵守
prefers-reduced-motion: reduce媒体查询
- PageLayout
enableRevealprop:默认true(全站启用),无需手动控制
<!-- Section 级别 -->
<Section background="default" reveal revealDelay={2}>
<!-- 整段淡入上浮,0.16s 延迟 -->
</Section>
<!-- 单元素级别 -->
<div data-reveal data-reveal-delay="0.1">
<!-- 自定义延迟 0.1s -->
</div>
<!-- 标题字符级联 -->
<h2 data-split-title>...</h2>参见 docs/gsap-plugins-plan.md(4 阶段:ScrollTrigger 基建 → SplitText 字符入场 → MorphSVG 点缀 → 清理 .reveal CSS)。
编辑 src/data/site.json:
{
"recruitment": {
"status": "open" | "closed" | "soon",
"deadline": "2025-09-15",
"message": "招新已结束,下次招新见 2026 春季"
}
}编辑 src/data/members.json:
{
"name": "新同学",
"year": 25,
"department": "tech" | "operate",
"group": "ACM",
"role": "成员",
"bio": "一句话简介",
"avatar": "/img/inspur/avatar.jpg",
"email": "[email protected]"
}新建 src/content/activities/<slug>.md:
---
title: 2024 第一次技术沙龙
date: 2024-03-15
cover: /img/inspur/xxx.jpg
---
正文 Markdown...blog/ 是从 ISC-XDU/Blog 克隆的 MkDocs 知识库(Material 主题)。
website-v2/
└── blog/ # 独立 MkDocs 项目
├── mkdocs.yml
├── docs/ # Markdown 源文件(含技术文档 / 浪潮动态 / 图片)
└── site/ # mkdocs build 输出(被 .gitignore 排除)
- 网站导航"博客"项通过相对路径
/blog/site/index.html链接到博客的构建产物 - 部署时需要:(1)
cd blog && mkdocs build产生site/;(2) 跟主站一起发布
cd blog
pip install mkdocs mkdocs-material
mkdocs serve # http://localhost:8000未来需要部署到生产时,待讨论的决策点:
- 推哪个 GitHub 仓库(新仓库 vs 改造旧
ISC-XDU/Website) - 阿里云 ECS 部署路径、SSH user、Nginx 站点配置
- CI 工具选型(GitHub Actions / 阿里云 ACR / 手动 rsync)
- 旧仓库处理(归档 / redirect / 保留 legacy mirror)
- 永远不要 push 到
github.com/ISC-XDU/Website(那是旧仓库的远程) - 永远不要修改
../Website/目录的任何文件(包括.git/) - 每次
git remote -v确认输出为空(无 remote) - 写文件前
Get-Location确认在website-v2/而不是Website/
浪潮俱乐部 Web 组