这篇文章是完全用 cursor 读取项目代码生成的,本意是为了帮助我后续开发时能够更快速地找到相关代码实现是在哪个位置,巧合之下想起来 cursor 可以自己设置相关的规则文档,具体可以看下面这篇文章
写了规则后,最明显的感受就是, cursor 不会乱写代码了……
1. 主题概述
Stellar 是一个现代化的 Hexo 主题,具有优雅的设计和丰富的功能。它采用模块化的设计理念,提供了灵活的配置选项和强大的扩展能力。主题的主要特点包括:
- 响应式设计:完美适配各种设备屏幕
- 多语言支持:内置中英文支持,可轻松扩展其他语言
- 丰富的功能:支持搜索、评论、文章分类等
- 高度可定制:通过配置文件轻松调整主题外观和功能
- 性能优化:采用现代化的前端技术,确保良好的加载速度
2. 目录结构
Stellar 主题的主要目录结构如下:
1 | stellar/ |
3. 核心配置文件
_config.yml
是主题的核心配置文件,主要包含以下几个部分:
3.1 基本信息配置
1 | stellar: |
这些配置项定义了主题的基本信息和资源路径。version
用于标识主题版本,homepage
和 repo
分别指向主题的文档和代码仓库。
3.2 侧边栏配置
侧边栏配置包括两个主要部分:
Logo 配置:
1
2
3
4logo:
avatar: '[{config.avatar}](/about/)'
title: '[{config.title}](/)'
subtitle: '{config.subtitle}'这里可以设置网站的头像、标题和副标题,支持 HTML 标签和链接。
菜单栏配置:
1
2
3
4
5
6
7
8menubar:
columns: 4
items:
- id: post
theme: '#1BCDFC'
icon: solar:documents-bold-duotone
title: 博客
url: /可以配置菜单项的数量、图标、颜色和链接等。
3.3 站点结构配置
site_tree
定义了不同类型页面的布局结构,包括:
列表类页面:
1
2
3
4
5
6
7
8home:
leftbar: welcome, recent
rightbar:
index_blog:
base_dir: blog
menu_id: post
leftbar: welcome, recent
rightbar:内容类页面:
1
2
3
4
5
6
7
8post:
menu_id: post
leftbar: related, recent
rightbar: ghrepo, toc
wiki:
menu_id: wiki
leftbar: tree, related, recent
rightbar: ghrepo, toc其他页面:
1
2
3
4
5error_page:
menu_id: post
'404': '/404.html'
leftbar: recent, timeline
rightbar: timeline
3.4 功能配置
3.4.1 搜索功能
1 | search: |
支持本地搜索和 Algolia 搜索,可配置搜索范围和字段。
3.4.2 评论系统
1 | comments: |
支持多种评论服务,包括 Giscus、Utterances 等。
3.4.3 文章配置
1 | article: |
可配置文章类型、缩进、封面等属性。
4. 布局系统
4.1 页面模板
主题提供了多种页面模板,每种模板都有特定的用途:
layout.ejs
: 基础布局模板,定义了页面的基本结构index.ejs
: 首页模板,展示博客文章列表post.ejs
: 文章页面模板,用于展示单篇文章page.ejs
: 自定义页面模板,用于创建特殊页面archive.ejs
: 归档页面模板,按时间展示文章categories.ejs
: 分类页面模板,按分类展示文章tags.ejs
: 标签页面模板,按标签展示文章
4.2 局部模板
_partial/
目录包含多个可重用的模板组件:
头部组件:
head.ejs
: 定义页面的 meta 标签和资源引用scripts.ejs
: 管理页面脚本的加载
侧边栏组件:
sidebar/index_leftbar.ejs
: 左侧边栏模板sidebar/index_rightbar.ejs
: 右侧边栏模板
内容组件:
main/article.ejs
: 文章内容模板main/footer.ejs
: 页脚模板
功能组件:
comments/*.ejs
: 评论系统相关模板widgets/*.ejs
: 各种小部件模板
5. 静态资源
5.1 样式文件
主题使用 Stylus 预处理器编写样式,主要文件包括:
基础样式:
main.styl
: 主样式文件,导入其他样式模块_custom.styl
: 自定义样式文件
组件样式:
_components/
: 各种UI组件的样式- 每个组件独立文件,便于维护
通用样式:
_common/
: 定义通用样式类- 包括颜色、间距等基础样式
布局样式:
_layout/
: 定义页面布局相关样式- 包括响应式布局规则
插件样式:
_plugins/
: 插件相关的样式定义- 保持插件的样式隔离
5.2 JavaScript 文件
主题的 JavaScript 文件组织如下:
核心脚本:
main.js
: 主脚本文件,初始化主题功能
功能模块:
plugins/
: 各种插件脚本search/
: 搜索功能相关脚本services/
: 服务相关脚本
6. 开发建议
6.1 自定义开发
进行自定义开发时,建议遵循以下步骤:
修改主题配置:
- 在
_config.yml
中调整主题设置 - 使用主题提供的配置项进行定制
- 在
自定义样式:
- 在
_custom.styl
中添加自定义样式 - 使用主题提供的变量和混合器
- 遵循 BEM 命名规范
- 在
添加功能:
- 在
source/js/
中添加新脚本 - 在
layout/_partial/
中添加新模板 - 在
_config.yml
中添加配置项
- 在
修改模板:
- 根据需要调整
layout/
中的模板文件 - 保持与主题设计风格一致
- 根据需要调整
6.2 最佳实践
开发过程中应遵循以下最佳实践:
保持目录结构清晰:
- 遵循主题的目录组织方式
- 合理组织自定义文件
遵循命名规范:
- 使用有意义的文件名
- 保持命名风格一致
使用模块化方式:
- 将功能拆分为独立模块
- 保持代码的可复用性
注意多语言支持:
- 使用主题提供的多语言机制
- 保持翻译的完整性
确保响应式设计:
- 测试不同设备的显示效果
- 优化移动端体验
7. 扩展功能
7.1 插件开发
开发自定义插件的步骤:
创建插件模板:
- 在
_plugins/
目录下创建模板文件 - 定义插件的 HTML 结构
- 在
配置插件:
- 在
_config.yml
中添加插件配置 - 设置插件的启用状态和参数
- 在
实现功能:
- 编写插件相关的 JavaScript 代码
- 添加必要的样式定义
7.2 数据管理
_data/
目录用于管理主题数据:
菜单配置:
- 在
menu.yml
中定义菜单项 - 设置菜单的显示顺序和属性
- 在
图标配置:
- 在
icons.yml
中定义图标 - 支持多种图标格式和来源
- 在
其他数据:
- 可以添加其他 YAML 文件
- 用于存储主题需要的静态数据
8. 调试与优化
8.1 调试方法
调试主题时可以使用以下方法:
浏览器开发者工具:
- 使用 Elements 面板检查 DOM 结构
- 使用 Console 面板查看错误信息
- 使用 Network 面板分析资源加载
主题调试模式:
- 启用主题的调试选项
- 查看详细的日志输出
代码检查:
- 使用 ESLint 检查 JavaScript 代码
- 使用 Stylelint 检查样式代码
8.2 性能优化
优化主题性能的方法:
资源优化:
- 压缩 CSS 和 JavaScript 文件
- 优化图片资源
- 使用 CDN 加速静态资源
代码优化:
- 减少不必要的 DOM 操作
- 优化事件处理函数
- 使用缓存机制
加载优化:
- 实现资源的延迟加载
- 优化首屏加载速度
- 使用预加载技术
9. 总结
Stellar 主题提供了完整的开发框架和丰富的功能支持。通过本文的指南,开发者可以更好地理解主题架构,进行自定义开发和功能扩展。建议在开发过程中遵循主题的设计理念,保持代码的整洁和可维护性。
10. 技术细节
10.1 布局系统详解
10.1.1 基础布局结构
主题采用三栏式布局,具体结构如下:
左侧栏:
- 导航菜单
- 功能区域
- 可折叠设计
中间栏:
- 主要内容区域
- 文章列表或内容
- 响应式布局
右侧栏:
- 辅助信息
- 功能组件
- 可隐藏设计
10.1.2 页面类型判断
主题通过以下代码判断页面类型:
1 | // 页面类型:索引页面还是内容页面 |
这段代码根据页面的 layout
属性和 nav_tabs
配置来确定页面类型,从而应用不同的样式和功能。
10.1.3 文章类型判断
文章类型的判断逻辑如下:
1 | // 文章类型:技术类文章/文学类文章 |
主题支持多种文章类型,可以根据需要设置不同的样式和布局。
10.2 样式系统详解
10.2.1 样式文件组织
主题的样式文件采用模块化组织方式:
组件样式:
_components/
: 包含各种UI组件的样式- 每个组件独立文件,便于维护
通用样式:
_common/
: 定义通用样式类- 包括颜色、间距等基础样式
布局样式:
_layout/
: 定义页面布局相关样式- 包括响应式布局规则
插件样式:
_plugins/
: 插件相关的样式定义- 保持插件的样式隔离
10.2.2 响应式设计
主题使用媒体查询实现响应式布局:
1 | @media screen and (max-width: 768px) { |
这些样式规则确保主题在不同设备上都能良好显示。
10.3 功能模块详解
10.3.1 搜索功能
搜索功能的主要特点:
搜索类型:
- 本地搜索:基于 JSON 文件的搜索
- Algolia 搜索:使用第三方搜索服务
配置选项:
- 搜索范围:可配置搜索文章、页面或全部
- 搜索字段:可指定搜索标题、内容或标签
- 搜索结果:支持高亮显示匹配内容
使用示例:
1
2
3
4
5
6search:
service: local_search
local_search:
field: all
path: /search.json
content: true
10.3.2 评论系统
评论系统支持多种服务:
Giscus:
- 基于 GitHub Discussions
- 支持主题切换
- 可配置映射方式
Utterances:
- 基于 GitHub Issues
- 轻量级实现
- 无需数据库
配置示例:
1
2
3
4
5
6comments:
service: giscus
giscus:
src: https://giscus.app/client.js
data-repo: xxx/xxx
data-repo-id: xxx
10.3.3 文章功能
文章功能包括:
文章分类:
- 支持多级分类
- 可配置分类颜色
- 自动生成分类页面
文章标签:
- 支持多个标签
- 标签云展示
- 标签页面生成
文章置顶:
- 支持置顶功能
- 可设置置顶顺序
- 在列表页优先显示
文章封面:
- 支持自定义封面
- 自动生成封面
- 封面比例可配置
10.4 开发技巧
10.4.1 自定义样式
自定义样式的建议:
使用
_custom.styl
:- 在此文件中添加自定义样式
- 避免直接修改主题文件
使用主题变量:
- 利用主题定义的变量
- 保持样式的一致性
遵循 BEM 规范:
- 使用块、元素、修饰符的命名方式
- 提高样式的可维护性
10.4.2 添加新功能
添加新功能的步骤:
规划功能:
- 确定功能需求
- 设计实现方案
开发实现:
- 创建必要的模板文件
- 编写 JavaScript 代码
- 添加样式定义
配置集成:
- 在配置文件中添加选项
- 确保与其他功能兼容
11. 参考资料
-
- 包含 Hexo 的详细使用说明
- 提供主题开发指南
- 介绍插件开发方法
-
- 主题的官方文档
- 配置说明和示例
- 常见问题解答
-
- 模板引擎的使用说明
- 语法规则和示例
- 高级特性介绍
-
- CSS 预处理器的使用
- 语法特性和示例
- 最佳实践指南