更新
@depracate
由于一些难以预料的错误(如页面锚点无法点击跳转(不确定是否确实为子系统导致)),本人已将 wiki 和主站作为两个仓库分割。所以本内容现在只作为参考,遇到具体问题请自行搜索解决。
缘起
想在博客系统的基础上搭建一个 wiki 系统 ,用于实现一些非原创知识体系的积累。当然可以通过创建两个 hexo 仓库分别用于渲染博客页面(主题一)和 wiki 页面(主题二);但是每次进行知识管理的时候就要切换不同的仓库目录,而且部分文件可能产生冗余(如:npm install 产生的 node_modules),所以本文实践利用一个 hexo 仓库内渲染生成使用不同 theme 生成主页和 wiki 页面,以实现一次部署和统一管理。
TL;DR
使用代替配置文件-配置 | Hexohexo --help
Global Options:
--config Specify config file instead of using _config.yml
root 目录下有两个 config 文件,默认使用_config.yml
,用hexo --config config_wiki.yml g
命令渲染wiki
页面至/public/wiki/
,同时设置点击主页面wiki
导航栏后自动跳转到public/wiki/
。
修改步骤
- 更改原主页面的 theme 的 config 文件,增加 navbar 类别(不同主题设置字段不同);
Wiki: /wiki/
- 为了避免在修改 wiki 配置时影响到主页面,将 root 目录下的
_config.yml
文件(即站点配置文件),复制并重命名为_config_wiki.yml
,以下修改均指此文件。 - 安装 hexo 的Wikitten主题,将其作为 wiki 页面的 theme;此外,你也可以选用其他风格 wiki 主题,如:wzpan/hexo-theme-wixo: A wiki theme for Hexo.
cd your-hexo-directory
git clone https://github.com/zthxxx/hexo-theme-Wikitten.git themes/Wikitten - 将 Wikitten theme 目录下 clone 所得的 source 和模板移动到 root 目录下,重命名主题 config 使其生效。
cp -rf themes/Wikitten/_source/* wiki/
cp themes/Wikitten/_scaffolds/embed.md scaffolds/embed.md
cp themes/Wikitten/_scaffolds/post.md scaffolds/wiki.md
cp -f themes/Wikitten/_config.yml.example themes/Wikitten/_config.yml - 修改 wikitten 主题的 config,更改资源文件目录,logo、favicon 等。
- 修改
_config_wiki.yml
设定使 wikitten 主题生效- theme: origin
+ theme: Wikitten
- per_page: 10
- url: https://masantu.com/
- root: /
- permalink: :year/:month/:day/:title/
+ url: https://masantu.com/wiki/
+ root: /wiki/
+ permalink: :title/
+ permalink_defaults: :year/:month/:day/:title/
+ skip_render:
+ - README.md
+ marked:
+ gfm: true
+ # 设置单独的source文件夹,用于放置wiki的源文件
- source_dir: source
+ source_dir: wiki
+ # 设置渲染到`public/wiki/`路径下
- public_dir: public
+ public_dir: public/wiki
+ default_layout: wiki使用
创建别名(可选)
主要目的是简化输入,如果不嫌麻烦,可以每次输入指令。
- Linux
视自己情况而定,在.zshrc
或者.bashrc
等文件中新增 aliasalias hwk="hexo --config _config_wiki.yml"
- windows参见:
doskey hwk=hexo --config _config_wiki.yml
新建 wiki
如果跳过上步,则将下面的指令中的hwk
替换为hexo --config _config_wiki.yml
hwk new "xxxx"
渲染页面
共用 db.json(猜测)会导致主页面 blog 内容与 wiki 内容混杂,需要在渲染前后进行 clean 操作。
- 首先渲染主页面,生成到/public/
hexo g
- 删除 db.json 及旧的 public/wiki
hwk clean
- 渲染 wiki 页面,生成到/public/wiki/
hwk g
手动删除 db.json,MUST!
rm db.json
db.json file is created and added to .gitignore using hexo.io - Stack Overflow
hexo 流程梳理之 database | john’s tech blog
以上流程写了一段 Python 代码来流程化处理,目前仅适用于 Windows 平台,Python3.7 测试通过。源码见此:✨imoyao.github.io/hexo_wiki_site_gen_all_in_one.py at hexo · imoyao/imoyao.github.io查看效果
hexo s
注意事项
Wikitten 主题会根据目录自动生成分类,所以不建议在文章的 front matter 中再去定义 categories 字段,或者定义 categories 之后直接放到首页 index 目录即可,不然可能导致分类出现重合。
- 为了以后“分家”方便(降低耦合度),建议不要和主站的图片目录放到一个文件夹中,比如我的主站图片在
sources/images/
文件夹下,则 wiki 的图片可以放到sources/pics/
或者sources/imgs/
目录下,这样以后如果要做拆分,直接剪切相应目录即可。当然,如果你使用 OSS 存储或图床服务,则不需要这样麻烦。
发现问题
- wiki 页面中文锚点无法点击!