文章

jekyll-compose:高效管理 Jekyll 文章的利器

jekyll-compose:高效管理 Jekyll 文章的利器

前言

如果经常手动创建 _posts/ 下的文件、复制 Front Matter,jekyll-compose 可以省去这些重复操作。它提供创建草稿、发布和重命名等 Jekyll 命令。下面按实际写作流程介绍用法;具体命令以 项目说明 为准。


安装

在项目根目录的 Gemfile 中添加:

1
gem 'jekyll-compose', group: [:jekyll_plugins]

然后执行:

1
bundle install

验证安装是否成功:

1
bundle exec jekyll help

如果输出中出现 draft、post、publish、unpublish、rename、compose 等子命令,说明安装完成。


核心命令一览

命令作用示例
jekyll draft "标题"创建草稿到 _drafts/jekyll draft "Redis缓存策略"
jekyll post "标题"直接创建文章到 _posts/jekyll post "Docker入门指南"
jekyll publish <草稿路径>将草稿发布为文章jekyll publish _drafts/redis缓存策略.md
jekyll unpublish <文章路径>将文章退回草稿jekyll unpublish _posts/2026-03-05-redis缓存策略.md
jekyll page "标题"创建新页面jekyll page "关于我"
jekyll rename <路径> "新标题"重命名文章或草稿jekyll rename _posts/2026-03-05-旧标题.md "新标题"
jekyll compose "标题"通用创建(默认为文章)jekyll compose "Nginx配置详解"

所有命令前需加 bundle exec,例如 bundle exec jekyll post "标题"。


推荐工作流:草稿 → 发布

如果一篇文章还要反复修改,可以先写草稿,再决定何时发布:

第一步:创建草稿

1
bundle exec jekyll draft "Kubernetes Pod 生命周期详解"

这会在 _drafts/ 目录生成草稿文件,并写入基础 Front Matter。实际文件名以命令输出为准。

第二步:本地预览草稿

1
bundle exec jekyll serve --drafts

加上 --drafts 参数后,草稿会以当天日期出现在站点中,方便预览效果。

第三步:写完后发布

1
bundle exec jekyll publish _drafts/kubernetes-pod-生命周期详解.md

插件会自动:

  • 在文件名前加上当天日期(如 2026-03-05-kubernetes-pod-生命周期详解.md)
  • 将文件从 _drafts/ 移动到 _posts/
  • 在 Front Matter 中添加 date 字段

需要撤回?

1
bundle exec jekyll unpublish _posts/2026-03-05-kubernetes-pod-生命周期详解.md

文件会被移回 _drafts/,日期前缀也会被去掉。


自定义 Front Matter 模板

这是 jekyll-compose 最实用的功能之一。在 _config.yml 中添加以下配置,每次创建文章/草稿时会自动填充你定义的 Front Matter:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
jekyll_compose:
  default_front_matter:
    posts:
      description:
      categories: []
      tags: []
      math: false
      mermaid: false
    drafts:
      description:
      categories: []
      tags: []
      math: false
      mermaid: false

配置后,执行 jekyll post "测试" 生成的文件内容如下:

1
2
3
4
5
6
7
8
9
10
---
layout: post
title: 测试
date: 2026-03-05 10:00:00 +0800
description:
categories: []
tags: []
math: false
mermaid: false
---

如果使用的主题(如 Chirpy)已有默认 layout,可以不在模板中写 layout。


创建后自动打开编辑器

方式一:配置 _config.yml

1
2
jekyll_compose:
  auto_open: true

方式二:设置环境变量

告诉 jekyll-compose 用哪个编辑器打开:

Windows PowerShell:

1
2
3
4
5
# 当前会话生效
$env:JEKYLL_EDITOR = "code"

# 永久写入用户环境变量
[Environment]::SetEnvironmentVariable("JEKYLL_EDITOR", "code", "User")

Linux / macOS:

1
2
# 写入 ~/.bashrc 或 ~/.zshrc
export JEKYLL_EDITOR="code"

配置完成后,每次创建文章时 VS Code 会自动打开对应文件。


自定义文件名格式

如果创建后想调整文章标题和文件名,可以使用 rename 命令:

1
2
# 创建后觉得文件名太长,重命名
bundle exec jekyll rename _posts/2026-03-05-kubernetes-pod-生命周期详解.md "K8s Pod 生命周期"

重命名会同时更新文件名和 Front Matter 中的 title。


实战演示

完整演示从创建到发布的全流程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 创建草稿
bundle exec jekyll draft "Git 常用命令速查表"
# => _drafts/git-常用命令速查表.md

# 2. 编辑内容(VS Code 自动打开)
# ... 编写文章 ...

# 3. 本地预览
bundle exec jekyll serve --drafts

# 4. 满意后发布
bundle exec jekyll publish _drafts/git-常用命令速查表.md
# => _posts/2026-03-05-git-常用命令速查表.md

# 5. 发现标题需要调整
bundle exec jekyll rename _posts/2026-03-05-git-常用命令速查表.md "Git 命令速查手册"
# => _posts/2026-03-05-git-命令速查手册.md

常见问题

Q:为什么执行命令提示找不到 draft 子命令?

确保 Gemfile 中将插件放在 jekyll_plugins 组内,并且已经执行过 bundle install:

1
gem 'jekyll-compose', group: [:jekyll_plugins]

Q:发布时能否指定日期?

可以,使用 --date 参数:

1
bundle exec jekyll publish _drafts/文章.md --date "2026-01-01"

Q:能和 GitHub Pages 一起使用吗?

jekyll-compose 只是本地命令行工具,它帮你生成和管理文件,不参与站点构建。所以不管你用 GitHub Pages 还是其他方式部署,都完全兼容。


总结

场景以前用 jekyll-compose
创建文章手动建文件、写日期前缀、复制 Front Matterjekyll post "标题" 一步到位
管理草稿手动在文件夹间移动、改文件名draft → publish → unpublish
重命名改文件名 + 改 Front Matter 中的 titlejekyll rename 自动同步
Front Matter每次复制粘贴模板配置一次,自动生成

如果经常创建草稿、改标题或手动填写 Front Matter,jekyll-compose 值得试试;只偶尔写一篇文章,手动创建文件也完全够用。


参考

本文由作者按照 CC BY 4.0 进行授权