文章

我的 Jekyll 博客写作工作流

在本博客上进行写作的本地工作流。

采用静态博客的坏处是前期部署工作比较复杂,好处是前期准备好了之后,后面的维护和迁移会相对简单。本文简单讲一下我是怎么在本地管理维护这个。

文章版本管理

先前提到过,我使用 Vercel 作为本博客的托管平台。每次在博客的 GitHub 仓库的指定的 branch 上进行 git push,Vercel 就会重新生成静态网站,将其在他的服务器上上线。

Jekyll 所有的文章都在 _posts 目录下。每次 commit 时,关注要上传哪些新的 .md 文件即可。可以只选择自己想要新公开的文章上传。

此外,如果想要临时,或者懒得管理哪些文件需要被上传,也可以使用 Jekyll 自带的隐藏功能。在文章的 YAML 元数据中加入 published: false 来隐藏该文章。想要再次显示该文章,在该行最初位置加入 # 注释掉这一行即可。

Markdown 写作

Markdown 是一种标记语言语法格式,使用标记符号对文章的进行诸如标题等级、引用图片和超链接以及文字加粗斜体等基本的样式定义。这种方法下,可以让写作者在不用过于在意版式的情况下进行顺畅的写作。

我推荐使用 Typora 作为在本地写作 Markdown 的工具。Typora 的好处是“所见即所得”,在使用 Markdown 写作的同时渲染内容。兼顾了 Markdown 的可迁移性和经典可视化文本编辑器的优点。

Typora 采用买断制付费,售价15美元,可同时授权3台设备。我在 Typora 推出收费的正式版之前就用了很多年这款软件,一直都很满意。如果想长期使用 Markdown 进行创作,建议购买。

Jekyll 所有的文章都在 _posts 目录下。在 Typora 中“打开文件夹”打开你的 Jekyll 项目的 _posts 目录,就可以比较方便地管理写作界面。

文章列表 文章列表

因为 Jekyll 规定所有文章的 Markdown 文件都应以 YYYY-MM-DD-TITLE 的格式命名,以及考虑到 Chirpy 主题不支持自定义文章永久链接,会使用 TITLE 自动生成文章永久链接,此处推荐使用根据文章标题倒序排列。如此一来,最新的文章会显示在列表最上方。

图片插入

对 Jekyll 图片插入无非有两种方法。要么在根目录下新建一个图片文件夹(可以起名叫 imagepicture 之类),把所有图片都放在该文件夹下,然后在 Markdown 引用图片时使用相对路径;要么在其他图床平台上传图片。

前者的好处是图片都归自己管理,数据相对安全,以后本地浏览迁移起来也方便;但同时,也会让自己的项目仓库变得很臃肿,而且容易在迁移到其他平台时需要额外操作。

后者的好处是只要图床不倒闭,图片的超链接就能长久保持在互联网上;坏处是重新整理到本地需要一番功夫

我这里选择用一个公开的 GitHub 仓库作为网络图床托管博客的图片。毕竟,GitHub 倒闭的概率还是比较小的。不过用 GitHub 也有个坏处,就是别人可以遍历你的 GitHub 公开仓库获取你所有的图片了,即使你没有把对应的文章上传到博客中,只是单纯地用这个 GitHub 仓库作为图床使用。

Typora 提供了使用 PicGo 把引入的图片自动上传到图床的功能。在 Typora 的设置中直接下载安装即可。

image-20241011151020946

如此配置 config.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "picBed": {
    "current": "github",
    "github": {
      "repo": "yourusername/yourreponame",
      "token": "github_token",
      "path": "img/",
      "customUrl": "https://raw.githubusercontent.com/yourusername/yourreponame/main",
      "branch": "main"
    }
  },
  "picgoPlugins": {}
}

其中 path 可以自定义,意思是 GitHub 仓库下的路径。我这里的 img/ 意思就是把仓库根目录下的 img 目录作为存放图片的目录。

根据 PicGo 官网的教程,除了需要开一个新的 GitHub 仓库外,还需要提供一个可以操作这个仓库的 GitHub token。

首先需要进入 https://github.com/settings/tokens,点击 Generate new token 生成新 token。

image-20241011161005331

然后填写必要选项即可。这里注意,过期日期可以尽可能填得晚一点,这样就能不用经常维护。此外,仓库权限选择仅限某一特定仓库。后面的权限随便全都打开就是了。

image-20241011161356483

评论区

顺便一提,这个 GitHub 仓库还可以用来充当博客的评论区。Chirpy 提供了使用 giscus 作为博客评论系统的功能,在配置文件里修改即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
comments:
  # Global switch for the post-comment system. Keeping it empty means disabled.
  provider: giscus # [disqus | utterances | giscus]
  # The provider options are as follows:
  disqus:
    shortname: # fill with the Disqus shortname. › https://help.disqus.com/en/articles/1717111-what-s-a-shortname
  # utterances settings › https://utteranc.es/
  utterances:
    repo: # <gh-username>/<repo>
    issue_term: # < url | pathname | title | ...>
  # Giscus options › https://giscus.app
  giscus:
    repo: username/reponame # <gh-username>/<repo>
    repo_id: <repo_id>
    category: Announcements
    category_id: <category_id>
    mapping: # optional, default to 'pathname'
    strict: # optional, default to '0'
    input_position: # optional, default to 'bottom'
    lang: en # optional, default to the value of `site.lang`
    reactions_enabled: # optional, default to the value of `1`

这里的 repo_idcategory_id 可以在 giscus 官网的配置引导获取,填入自己的 username/reponame 后,下面的配置文件示例就会显示对应的 id。

此外,别忘了开启这个仓库的 discussion 功能:

image-20241011153636083

这么做的好处是只要 GitHub 不倒闭评论内容一直都有,而且也方便自定义重构插件迁移博客。坏处则是没有 GitHub 账号就无法留言。

不过反过来想也还算合理。如果没有 GitHub,可能也不会想看本博客。能看本博客的人,注册一个 GitHub 也不是什么难事。

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