从 jekyll 切换到 zola
2019-08-15 12:55 misc
最近写的博客多一些, 也更加厌烦了 jekyll
, 它对 markdown 支持的问题. 前天时间
多一些, 就找到了 rust 静态网站工具, zola.
首先是源代码更新还比较频繁, 社区也蛮活跃. 翻了官网的文档, 也蛮简单的. 初步考察之后, 就决定尝试着把博客迁移到 zola.
安装
对于 debian 系统, 官网并没有提供相应的安装包, 只好从源码编译.
从 zola github页面 下载好源码后, 可以用 cargo
来编译并安装它:
$ cargo install --path .
如果下载 crates 比较慢的话, 可以修改cargo 使用国内代理.
生成博客基本目录结构
生成项目名为 blog
的目录:
$ zola init blog
期间, zola 会询问一些项目基本信息, 填写完成后, 生成了的 blog
目录有以下结构:
$ tree blog
|-- config.toml
|-- content
|-- sass
|-- static
|-- templates
`-- themes
其中:
config.toml
文件用于管理整个项目的配置, 比如是否开启索引, 是否启用语法高亮等.content
目录用于放置博客正文以及相应的资源文件.sass
用于放置 SASS 样式文件, 可以编译为 css 文件.static
用于放置全站静态文件, 里面可以放favicon.ico
,images/
,stles/
,js
等. 里面的内容会完整地复制到生成的目录中.templates
目录用于放置页面模板, 模板使用 tera 引擎渲染.themes
目录可以放第三方定义的主题包.
设置 config.toml
项目配置比较简单, 主要是开启了语法高亮和文章分类 (categories):
# The URL the site will be built for
base_url = "https://blog.biofan.org"
title = "少华的博客"
description = "轻风拂山岗"
#default_language = "zh"
generate_rss = true
# Whether to automatically compile all Sass files in the sass directory
compile_sass = false
#theme = "even"
# Whether to do syntax highlighting
# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
highlight_code = true
highlight_theme = "monokai"
# Whether to build a search index to be used later on by a JavaScript library
build_search_index = false
ignored_content = ["*.swp"]
taxonomies = [
{name = "categories", rss = true, paginate_by = 10},
{name = "tags", rss = false, paginate_by = 10},
]
[extra]
# Put all your custom variables here
[extra.author]
name = "Xu Shaohua"
email = "shaohua@biofan.org"
要注意的是, zola 并不会监控 config.toml
文件的更新, 所以当修改了它之后, 需要
手动重启一下 zola.
添加新文章
要添加一篇新的博客, 只需要在 content
目录里加入一个新的 markdown 文件即可,
为了方便, 我修改了之前的自动生成新博客的脚本:
#!/bin/bash
# Copyright (c) 2017 Xu Shaohua<shaohua@biofan.org>. All rights reserved.
# Use of this source is governed by General Public License that can be found
# in the LICENSE file.
set -xe
# Create a new article template.
ARTICLE=$1
if [ -z "${ARTICLE}" ]; then
echo "$0 article-name"
exit 1
fi
TIMESTAMPE=$(date --rfc-3339=seconds)
FILENAME="content/$(date +%Y-%m-%d)-${ARTICLE}.md"
URL_PATH="$(date +%Y)/$(date +%m)/${ARTICLE}"
echo "TIMESTMAP: ${TIMESTAMPE}"
echo "FILENAME: ${FILENAME}"
echo "URL_PATH: ${URL_PATH}"
if [ ! -f "${FILENAME}" ]; then
cat > "${FILENAME}" << EOF
+++
title = "${ARTICLE}"
description = ""
date = ${TIMESTAMPE}
path = "${URL_PATH}"
[taxonomies]
categories = []
+++
<!-- more -->
EOF
fi
vim "${FILENAME}"
使用也很简单, 比如本文就是这样生成的:
$ ./new-article.sh replace-jekyll-with-zola
zola 的优势
这几天体会到的 zola 有这些优点:
- 快, 超级快, 七八十篇文章, 只花了0.2秒就能生成完, 在之前用 jekyll 时需要数秒时间.
- 简单, zola 命令只有两三个参数, 使用非常简单.
- zola 自带了数十个语法高亮主题, 常用的
monokia
也在其中. - tera 模板简洁够用, 能完全满足目前的需求.
除了上面提到的优势, zola 还是有些缺点的, 比如:
- rss 功能不太完整.
- 不是开箱即用的, 需要花些功夫配置一下主题等.
- 源代码中自带的模板示例并不完整, 没有展示出 zola 的全部功能.
其它问题
目前, main
分支 (版本号是 0.8.0
) 的 zola 存在一些 bug, 比如:
draft = True
的实现有歧议, 这样的页面依然会被渲染和发布- 生成的
rss.xml
文件里的 URL 地址被转码, 不能正常打开
这些问题在 next
分支 (版本号是 0.9.0
) 被修正了, 可以下载代码并
安装 next
分支.