Jekyll 静态站点完全教程 / 第1章:Jekyll 概述与生态
第1章:Jekyll 概述与生态
1.1 什么是 Jekyll
Jekyll 是一个静态站点生成器(Static Site Generator, SSG),由 Tom Preston-Werner 于 2008 年创建。它的核心理念是:
将纯文本内容通过模板渲染为可部署的静态网站,无需数据库、无需服务端运行时。
Jekyll 使用 Ruby 编写,内置 Liquid 模板引擎,原生支持 Markdown 写作,并深度集成 GitHub Pages。
核心特性
| 特性 | 说明 |
|---|---|
| 静态输出 | 生成纯 HTML/CSS/JS,无服务端依赖 |
| Markdown 支持 | 原生支持 Markdown、Textile |
| Liquid 模板 | Shopify 开发的模板语言 |
| 博客感知 | 原生支持文章(Posts)、分类(Categories)、标签(Tags) |
| GitHub Pages 零配置 | 推送到 GitHub 即可自动构建部署 |
| 插件生态 | 通过 Ruby Gems 扩展功能 |
| 数据文件 | 支持 YAML/JSON/CSV 数据源 |
1.2 Jekyll 的历史
| 年份 | 里程碑 |
|---|---|
| 2008 | Tom Preston-Werner 发布 Jekyll 0.1 |
| 2013 | GitHub Pages 开始原生支持 Jekyll |
| 2014 | Jekyll 2.0 发布,引入 Collections |
| 2016 | Jekyll 3.0,性能大幅提升 |
| 2019 | Jekyll 4.0,增量构建、新默认主题 |
| 2023 | Jekyll 4.3,持续维护更新 |
1.3 Jekyll 的工作原理
源文件 → 解析 → 渲染 → 输出静态文件
content/ → Markdown 解析 → Liquid 模板渲染 → public/
layouts/ → ↑ ↑ ├── index.html
includes/ ─────┘ │ ├── posts/
_config.yml ────────────────────────┘ └── assets/
处理流程:
- 读取
_config.yml全局配置 - 扫描所有源文件,解析 Front Matter
- 按文件类型分类:文章(Posts)、页面(Pages)、集合(Collections)
- 将 Markdown 转换为 HTML
- 套用 Layout 模板,解析 Liquid 标签
- 输出到
_site/目录
1.4 Ruby 生态简介
Jekyll 基于 Ruby 构建,理解 Ruby 生态有助于高效使用 Jekyll。
Ruby 核心概念
| 概念 | 说明 | 类比 |
|---|---|---|
| Ruby | 编程语言 | Python、Node.js |
| RubyGems | 包管理器 | npm、pip |
| Bundler | 依赖管理工具 | package.json + lock |
| Gemfile | 依赖声明文件 | requirements.txt |
| Gem | Ruby 包/库 | npm package |
为什么选择 Ruby 生态
# Ruby 的优势在于文本处理和模板渲染
# Jekyll 的核心能力正是文本 → HTML 的转换
# Gemfile 示例
source "https://rubygems.org"
gem "jekyll", "~> 4.3"
gem "jekyll-paginate"
gem "jekyll-seo-tag"
注意事项:
- Ruby 版本需与 Jekyll 兼容,推荐使用
rbenv管理版本 - Windows 用户需安装 Ruby+Devkit 版本
- 生产构建建议锁定 Gem 版本(使用
Gemfile.lock)
1.5 Jekyll 与 Hugo 深度对比
这是开发者最常问的问题:该选 Jekyll 还是 Hugo?
功能对比表
| 维度 | Jekyll | Hugo |
|---|---|---|
| 语言 | Ruby | Go |
| 安装 | 需要 Ruby 环境 | 单二进制文件 |
| 构建速度 | 中等(秒级) | 极快(毫秒级) |
| 模板语言 | Liquid | Go Template |
| 内置功能 | 博客原生支持 | 需手动配置 |
| 插件 | Ruby Gems 生态丰富 | 内置为主 |
| GitHub Pages | 原生支持 | 需自建 CI |
| 学习曲线 | 中等 | 较陡 |
| 主题生态 | 丰富 | 非常丰富 |
| 多语言 | 需插件 | 原生支持 |
代码风格对比
Jekyll (Liquid):
{% for post in site.posts %}
<h2><a href="{{ post.url }}">{{ post.title }}</a></h2>
<time>{{ post.date | date: "%Y-%m-%d" }}</time>
{{ post.excerpt }}
{% endfor %}
Hugo (Go Template):
{{ range .Pages }}
<h2><a href="{{ .Permalink }}">{{ .Title }}</a></h2>
<time>{{ .Date.Format "2006-01-02" }}</time>
{{ .Summary }}
{{ end }}
选择建议
| 场景 | 推荐 | 理由 |
|---|---|---|
| GitHub Pages 博客 | Jekyll | 零配置部署 |
| 大型文档站(1000+ 页) | Hugo | 构建速度 |
| 需要丰富插件 | Jekyll | Gem 生态 |
| 不想装 Ruby | Hugo | 单文件安装 |
| 从 WordPress 迁移 | Jekyll | 迁移工具更成熟 |
| 团队协作 | 两者皆可 | Git 工作流相同 |
业务场景:如果你的团队已经在用 Ruby on Rails,选择 Jekyll 可以复用 Ruby 工具链;如果团队偏好 Go 或追求极致构建速度,Hugo 更合适。
1.6 GitHub Pages 集成
GitHub Pages 是 Jekyll 最大的杀手级应用场景。
工作原理
git push → GitHub 服务器 → 自动运行 jekyll build → 部署到 pages.github.com
支持的仓库类型
| 类型 | URL 格式 | 说明 |
|---|---|---|
| 用户/组织站点 | username.github.io | 仓库名即域名 |
| 项目站点 | username.github.io/repo | 项目子路径 |
GitHub Pages 限制
# GitHub Pages 使用的安全模式白名单插件
# 不在白名单中的插件无法使用
plugins:
- jekyll-paginate # ✅ 允许
- jekyll-sitemap # ✅ 允许
- jekyll-include-cache # ✅ 允许
- custom-plugin # ❌ 需自建 CI
注意事项:
- GitHub Pages 锁定 Jekyll 版本(通常落后最新版 1-2 个版本)
- 自定义域名需配置
CNAME文件 - 私有仓库的 GitHub Pages 需要 Pro 计划
- 如需使用非白名单插件,需使用 GitHub Actions 自行构建
1.7 适用场景分析
✅ 非常适合
| 场景 | 原因 |
|---|---|
| 个人技术博客 | 原生博客支持、Markdown 写作 |
| 项目文档站 | GitHub Pages 零成本部署 |
| 公司官网 | 静态安全、易于维护 |
| API 文档 | 结合 jekyll-swagger 插件 |
| 作品集/Portfolio | 模板灵活、免费托管 |
⚠️ 不太适合
| 场景 | 原因 | 替代方案 |
|---|---|---|
| 电商网站 | 需要动态功能 | Next.js + Headless CMS |
| 高频更新站(新闻) | 每次需重新构建 | Gatsby + SSG |
| 大型知识库(万级页面) | 构建速度瓶颈 | Hugo / Docusaurus |
| 需要用户系统 | 静态站点限制 | 全栈框架 |
实际业务场景示例
场景 1:技术团队文档中心
需求:为 5 个微服务项目建立统一文档站
方案:一个 Jekyll 仓库,使用 Collections 分离各项目文档
优势:统一搜索、统一风格、Git 版本控制
场景 2:从 WordPress 迁移
需求:现有 WordPress 博客(500+ 篇文章)迁移到静态站
方案:使用 jekyll-export 导出 → Jekyll 导入 → GitHub Pages 部署
优势:零运维成本、HTTPS 免费、速度提升
1.8 Jekyll 版本选择
| 版本 | 状态 | 说明 |
|---|---|---|
| 3.x | 维护模式 | GitHub Pages 仍在使用 |
| 4.0 | 稳定 | 引入增量构建 |
| 4.2 | 稳定 | 性能优化 |
| 4.3 | 推荐 | 当前最新稳定版 |
# 推荐 Gemfile 配置
gem "jekyll", "~> 4.3"
1.9 核心术语速查
| 术语 | 英文 | 说明 |
|---|---|---|
| 静态站点生成器 | Static Site Generator | 将文本转为 HTML 的工具 |
| 前置数据 | Front Matter | 文件头部的 YAML 配置 |
| 布局 | Layout | 页面的外层模板 |
| 包含 | Include | 可复用的模板片段 |
| 集合 | Collections | 自定义内容类型 |
| 数据文件 | Data Files | _data/ 下的结构化数据 |
| 永久链接 | Permalink | 文章/页面的 URL 结构 |
| 主题 | Theme | 站点的视觉模板包 |
1.10 扩展阅读
本章小结
| 要点 | 说明 |
|---|---|
| Jekyll 是什么 | Ruby 编写的静态站点生成器 |
| 核心优势 | GitHub Pages 集成、博客原生支持、插件生态 |
| 与 Hugo 对比 | 易用性优先 vs 速度优先 |
| 适用场景 | 博客、文档站、项目主页 |
| 生态依赖 | Ruby + Bundler + Liquid |
下一章:安装与环境配置