博客数据管理

使用 hexo-cli 创建了一个本地的 Hexo 博客实例后,Hexo 会自动生成一个目录结构:

1
2
3
4
5
6
7
8
9
10
11
.
├── _config.landscape.yml
├── _config.yml
├── db.json
├── node_modules
├── package-lock.json
├── package.json
├── public
├── scaffolds
├── source
└── themes

如上所示,在这个目录结构里,博客文章源文件,主要放在 source 目录里,而生成的二进制文件,主要放在了 public 目录里。让我们看一下 public 目录的结构。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public
├── 2024
│   └── 02
│   └── 07
│   ├── How-to-create-a-blog-with-Hexo
│   │   └── index.html
│   ├── HowTo-用-Hexo-建立一个博客
│   │   └── index.html
│   └── hello-world
│   └── index.html
├── archives
│   ├── 2024
│   │   ├── 02
│   │   │   └── index.html
│   │   └── index.html
│   └── index.html
├── categories
│   └── Guide-手册
│   └── index.html
├── css
│   ├── images
│   │   └── banner.jpg
│   └── style.css
├── fancybox
│   ├── jquery.fancybox.min.css
│   └── jquery.fancybox.min.js
├── index.html
├── js
│   ├── jquery-3.6.4.min.js
│   └── script.js
└── tags
└── guide
└── index.html

不难理解,这个 public 目录,就是一个网站的根目录,可以理解为一个 VirtualHostDocumentRoot。这里目录里的每个人文件的路径,其实就是最终网址后面的 path。

我们可以看到,文章的路径是按照 /年/月/日/文章名/ 这样的方式组织的,为什么是这样的呢?打开主配置文件 _config.yml,可以看到如下的配置项:

1
permalink: :year/:month/:day/:title/

上面是文章永久链接的配置项,指定了生成的页面的 path,你也可以在文章的 FrontMatter 区段指定此篇文章的配置,如果没有指定,就会按照主配置文件的规则。通过这样的配置,我们可以使最后生成的网站的文章目录井井有条。比起最后生成的网页来说,源文件是更重要的数据,因为如果我们更换整个博客的 Theme,那么所有的文章需要重新生成,这时候更重要的是源文件。现在来看看源文件的目录布局。

1
2
3
4
5
6
7
8
9
10
11
➜  blog git:(main) ✗ tree source
source
├── _drafts
│   └── 博客数据管理.md
└── _posts
├── How-to-create-a-blog-with-Hexo.md
├── HowTo-用-Hexo-建立一个博客.md
├── HowTo-给博客安装一个主题.md
└── hello-world.md

3 directories, 5 files

相比之下,源文件的目录的布局就比较简单,所有的已经发布的文章,都混在一个单一目录 _posts 中,现在文章数量少,看着还行,不那么凌乱,一旦文章数量变多,比如,超过 400 篇,则会变得相当难以管理。那么我们到底能不能也像 public 文件夹那样,将源文件也管理得井井有条呢?

当然可以!

Hexo 并不会在意 _posts 目录里的布局,它会递归地扫描所有的源码文件,然后按照 permalink 配置的模式去生成最后的页面,所以,最后的页面是什么网址,和你的源文件怎么组织,是没有关联的。这就使得你可以自由地安排自己的目录布局。