阅读 122

【Hexo】自定义 Hexo 配置文件

说明

上一篇里,介绍了使用 Hexo + github pages + travis ci 实现自动化博客部署,我们已经收获了一个属于自己的博客,但现在还比较简陋,里面的设置信息都是默认的数据,所以我们需要把它们改成我们想要的内容。

所以这一篇里,主要介绍 Hexo 的配置文件如何设置。通过本篇的学习,你将知道 Hexo 配置文件的各个属性是什么意思,并给出我使用的配置,这样你就能随心所欲的进行配置了。

站点信息

先来看第一部分,站点信息的配置。先说明一下各个字段的含义:

参数 描述
title 网站标题
subtitle 网站副标题
description 网站描述,主要用于 SEO,告诉搜索引擎关于站点的简要信息
keywords 网站的关键词。使用半角逗号, 分隔多个关键词。
author 你的名字
language 网站使用的语言,常见的有 zh-Hans 、zh-CN 、 en
timezone 网站时区。默认使用本地时区。也可以指定其它时区,如 America/New_York, Japan, 和 UTC 。一般的,对于中国大陆地区可以使用 Asia/Shanghai。

下面是我的配置,可以作为参考:

# Site
title: 弗兰克的猫
subtitle: '永远年轻,永远热泪盈眶'
description: '铭记过去,拥抱未来,心中有梦,眼里有光'
keywords: 生活,编程,阅读,音乐,电影
author: 清风
language: zh-CN
timezone: ''
复制代码

网址信息

网址信息配置主要是设置网站的地址和文章链接格式。

参数 描述 默认值
url 网址
root 网站根目录
permalink 文章的永久链接 格式 :year/:month/:day/:title/
permalink_defaults 永久链接中各部分的默认值
pretty_urls 改写 permalink 的值来美化 URL
pretty_urls.trailing_index 是否在永久链接中保留尾部的 index.html,设置为 false 时去除 true
pretty_urls.trailing_html 是否在永久链接中保留尾部的 .html, 设置为 false 时去除 (对尾部的 index.html无效) true

例如:

# 比如,一个页面的永久链接是 http://example.com/foo/bar/index.html
pretty_urls:
  trailing_index: false
# 此时页面的永久链接会变为 http://example.com/foo/bar/
复制代码

这里通常只需要修改 urlroot,如果博客是使用 github pages 进行部署的,url 配置成对应的博客地址即可。这里需要注意的是 root 的值,如果是按照我们上一篇中的方式进行部署的,则需要把 root 的值设置为 /项目名/

下面是我的配置:

# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: https://mfrank2016.github.io/
root: /breeze-blog/
permalink: :year/:month/:day/:title/
permalink_defaults:
pretty_urls:
  trailing_index: true # Set to false to remove trailing 'index.html' from permalinks
  trailing_html: true # Set to false to remove trailing '.html' from permalinks
复制代码

目录信息

目录信息是指定各类目录对应的位置,通常不需要修改。

参数 描述 默认值
source_dir 资源文件夹,这个文件夹用来存放博客 md 等文件。 source
public_dir 公共文件夹,这个文件夹用于存放生成的站点静态文件。 public
tag_dir 标签文件夹 tags
archive_dir 归档文件夹 archives
category_dir 分类文件夹 categories
code_dir Include code 文件夹,source_dir 下的子目录 downloads/code
i18n_dir 国际化(i18n)文件夹 :lang
skip_render 跳过指定文件的渲染。匹配到的文件将会被不做改动地复制到 public 目录中。您可使用 glob 表达式来匹配路径。

例如:

skip_render: "mypage/**/*"
# 将会直接将 `source/mypage/index.html` 和 `source/mypage/code.js` 不做改动地输出到 'public' 目录
# 你也可以用这种方法来跳过对指定文章文件的渲染
skip_render: "_posts/test-post.md"
# 这将会忽略对 'test-post.md' 的渲染
复制代码

我的配置如下:

# Directory
source_dir: source
public_dir: public
tag_dir: tags
archive_dir: archives
category_dir: categories
code_dir: downloads/code
i18n_dir: :lang
skip_render:
复制代码

文章配置

这一部分是配置与文章相关的各类属性。

参数 描述 默认值
new_post_name 新文章的文件名称 :title.md
default_layout 预设布局 post
auto_spacing 在中文和英文之间加入空格 false
titlecase 把标题转换为 title case false
external_link 在新标签中打开链接 true
external_link.enable 在新标签中打开链接 true
external_link.field 对整个网站(site)生效或仅对文章(post)生效 site
external_link.exclude 需要排除的域名。主域名和子域名如 www 需分别配置 []
filename_case 把文件名称转换为 (1) 小写或 (2) 大写 0
render_drafts 显示草稿 false
post_asset_folder 启动 Asset 文件夹 false
relative_link 把链接改为与根目录的相对位址 false
future 显示未来的文章 true
highlight 代码块的设置
highlight.enable 开启代码块高亮 true
highlight.auto_detect 如果未指定语言,则启用自动检测 false
highlight.line_number 显示行数 true
highlight.tab_replace 用 n 个空格替换 tabs;如果值为空,则不会替换 tabs ''
highlight.wrap 把代码块用 `` 包裹 true
highlight.hljs 为 highlight 的 css 文件中的类添加 hljs-* 前缀 false

auto_spacing 建议开启,这样的话看起来更美观,titlecase 是指关键单词首字母大写,如果不太清楚,可以看下面的说明:

Titles should be written in title case. This means only using capital letters for the principal words. Articles, conjunctions, and prepositions do not get capital letters unless they start the title. For example: The Last of the Mohicans

post_asset_folder 建议开启,这样会在生成新的文章时,同时会同一目录下生成同名文件夹,这样可以把该文章相关的图片等资源放进去,方便引用和管理。

下面是我的配置:

new_post_name: :title.md # File name of new posts
default_layout: post
auto_spacing: true
titlecase: false # Transform title into titlecase
external_link:
  enable: true # Open external links in new tab
  field: post # Apply to the whole site
  exclude: ''
filename_case: 0
render_drafts: false
post_asset_folder: true
relative_link: false
future: true
# highlight:
#   enable: true
#   line_number: true
#   auto_detect: false
#   tab_replace: ''
#   wrap: true
#   hljs: false
highlight:
  enable: false

# 代码高亮
prism_plugin:
  mode: 'preprocess'    # realtime/preprocess
  theme: 'tomorrow'
  line_number: false    # default false
  custom_css:
复制代码

这里我使用了另一个代码高亮插件,如果通常使用默认的 hljs 高亮即可。如果也想要使用这个插件,可以查看这里,需要先进行安装:

npm i -S hexo-prism-plugin
复制代码

分类和标签信息

这里配置的是别名,即映射信息,如果文章使用的是英文名分类,这里可以不用设置,如果使用了中文名分类,最好配置一些对应的英文名,否则在对应的分类链接中就会出现 URL 编码的中文,比如这样:

http://localhost:4000/breeze-blog/categories/programming/life/%E6%B5%8B%E8%AF%95/
复制代码
参数 描述 默认值
default_category 默认分类 uncategorized
category_map 分类别名
tag_map 标签别名

我的配置如下:

# Category & Tag
default_category: uncategorized
category_map:
  编程: programming
  生活: life
  阅读: reading
  随想: thoughts
  理财: finance
tag_map:
  敏捷开发: agile-development
  环境搭建: environment-building
复制代码

日期 / 时间格式

Hexo 使用 Moment.js 来解析和显示时间。

参数 描述 默认值
date_format 日期格式 YYYY-MM-DD
time_format 时间格式 HH:mm:ss
use_date_for_updated 启用以后,如果 Front Matter 中没有指定 updatedpost.updated 将会使用 date 的值而不是文件的创建时间。在 Git 工作流中这个选项会很有用 true

我的配置如下:

# Date / Time format
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: YYYY-MM-DD
time_format: HH:mm:ss
## Use post's date for updated date unless set in front-matter
use_date_for_updated: true
复制代码

分页信息

参数 描述 默认值
per_page 每页显示的文章量 (0 = 关闭分页功能) 10
pagination_dir 分页目录 page

我的配置如下:

# Pagination
## Set per_page to 0 to disable pagination
per_page: 12
pagination_dir: page
复制代码

扩展信息

参数 描述
theme 当前主题名称。值为false时禁用主题
theme_config 主题的配置文件。在这里放置的配置会覆盖主题目录下的 _config.yml 中的配置
deploy 部署部分的设置
meta_generator Meta generator 标签。 值为 false 时 Hexo 不会在头部插入该标签

这里设置 theme 即可开启对应的主题,具体如何设置会在后面的文章进行详细说明。

theme_config 可以在这里配置主题文件里的各个参数进行覆盖,这样就不用维护两份 config 文件了,不过个人觉得还是不同主题文件使用不同配置文件比较好。

deploy 是部署相关的配置,比如 git 部署,除此之外,还有很多其它部署姿势,比如:HerokuNetlify 等,但都需要先安装对应的插件。

我的配置如下:

# Extensions
theme: hexo-theme-matery

# Deployment
deploy:
  type: 'git'
  repo: git@github.com:MFrank2016/breeze-blog
  branch: gh-pages
复制代码

包括或不包括目录和文件

Hexo 配置文件中,通过设置 include/exclude 可以让 Hexo 进行处理或忽略某些目录和文件夹。可以使用 glob 表达式 对目录和文件进行匹配。

includeexclude 选项都只能应用于 source/ 文件夹, 但 ignore 选项可以应用于所有文件夹。

参数 描述
include Hexo 默认会忽略隐藏文件和文件夹(包括名称以下划线和 . 开头的文件和文件夹,Hexo_posts_data 等目录除外)。通过设置此字段将使 Hexo 处理他们并将它们复制到 source 目录下。
exclude Hexo 会忽略这些文件和目录
ignore 忽略文件或文件夹

举例:

# Include/Exclude Files/Folders
include:
  - ".nojekyll"
  # 包括 'source/css/_typing.css'
  - "css/_typing.css"
  # 包括 'source/_css/' 中的任何文件,但不包括子目录及其其中的文件。
  - "_css/*"
  # 包含 'source/_css/' 中的任何文件和子目录下的任何文件
  - "_css/**/*"

exclude:
  # 不包括 'source/js/test.js'
  - "js/test.js"
  # 不包括 'source/js/' 中的文件、但包括子目录下的所有目录和文件
  - "js/*"
  # 不包括 'source/js/' 中的文件和子目录下的任何文件
  - "js/**/*"
  # 不包括 'source/js/' 目录下的所有文件名以 'test' 开头的文件,但包括其它文件和子目录下的单文件
  - "js/test*"
  # 不包括 'source/js/' 及其子目录中任何以 'test' 开头的文件
  - "js/**/test*"
  # 不要用 exclude 来忽略 'source/_posts/' 中的文件。你应该使用 'skip_render',或者在要忽略的文件的文件名之前加一个下划线 '_'
  # 在这里配置一个 - "_posts/hello-world.md" 是没有用的。

ignore:
  # Ignore any folder named 'foo'.
  - "**/foo"
  # Ignore 'foo' folder in 'themes/' only.
  - "**/themes/*/foo"
  # Same as above, but applies to every subfolders of 'themes/'.
  - "**/themes/**/foo"
复制代码

列表中的每一项都必须用单引号或双引号包裹起来。

includeexclude 并不适用于 themes/ 目录下的文件。如果需要忽略 themes/ 目录下的部分文件或文件夹,可以使用 ignore 或在文件名之前添加下划线 _

微信公众号