更新

@depracate

由于一些难以预料的错误(如页面锚点无法点击跳转(不确定是否确实为子系统导致)),本人已将 wiki 和主站作为两个仓库分割。所以本内容现在只作为参考,遇到具体问题请自行搜索解决。

缘起

想在博客系统的基础上搭建一个 wiki 系统 ,用于实现一些非原创知识体系的积累。当然可以通过创建两个 hexo 仓库分别用于渲染博客页面(主题一)和 wiki 页面(主题二);但是每次进行知识管理的时候就要切换不同的仓库目录,而且部分文件可能产生冗余(如:npm install 产生的 node_modules),所以本文实践利用一个 hexo 仓库内渲染生成使用不同 theme 生成主页和 wiki 页面,以实现一次部署和统一管理。

TL;DR

使用代替配置文件-配置 | Hexo

hexo --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/

修改步骤

  1. 更改原主页面的 theme 的 config 文件,增加 navbar 类别(不同主题设置字段不同);
    Wiki: /wiki/
  2. 为了避免在修改 wiki 配置时影响到主页面,将 root 目录下的_config.yml文件(即站点配置文件),复制并重命名为_config_wiki.yml,以下修改均指此文件。
  3. 安装 hexo 的Wikitten主题,将其作为 wiki 页面的 theme;
    cd your-hexo-directory
    git clone https://github.com/zthxxx/hexo-theme-Wikitten.git themes/Wikitten
    此外,你也可以选用其他风格 wiki 主题,如:wzpan/hexo-theme-wixo: A wiki theme for Hexo.
  4. 将 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
  5. 修改 wikitten 主题的 config,更改资源文件目录,logo、favicon 等。
  6. 修改_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

    使用

创建别名(可选)

主要目的是简化输入,如果不嫌麻烦,可以每次输入指令。

新建 wiki

如果跳过上步,则将下面的指令中的hwk替换为hexo --config _config_wiki.yml

hwk new "xxxx"

渲染页面

共用 db.json(猜测)会导致主页面 blog 内容与 wiki 内容混杂,需要在渲染前后进行 clean 操作。

  1. 首先渲染主页面,生成到/public/
    hexo g
  2. 删除 db.json 及旧的 public/wiki
    hwk clean
  3. 渲染 wiki 页面,生成到/public/wiki/
    hwk g
  4. 手动删除 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

  5. 查看效果

    hexo s

    注意事项

  6. Wikitten 主题会根据目录自动生成分类,所以不建议在文章的 front matter 中再去定义 categories 字段,或者定义 categories 之后直接放到首页 index 目录即可,不然可能导致分类出现重合。

  7. 为了以后“分家”方便(降低耦合度),建议不要和主站的图片目录放到一个文件夹中,比如我的主站图片在sources/images/文件夹下,则 wiki 的图片可以放到sources/pics/或者sources/imgs/目录下,这样以后如果要做拆分,直接剪切相应目录即可。当然,如果你使用 OSS 存储或图床服务,则不需要这样麻烦。

发现问题

  1. wiki 页面中文锚点无法点击!

参考链接

Hexo 同时使用两种主题