写作
你可以执行下列命令来创建一篇新文章或者新的页面。
layout:布局
tltle:页面名称/文章名称
1 | hexo new [layout] <title> |
例如:
1 | hexo new page hello-word-page |
md布局介绍,参考下面的文档
布局(Layout)
Hexo
有三种默认布局:post
、page
、draft
- 在创建这三种不同类型的文件时,它们将会被保存到不同的路径。
- 您自定义的其他布局和
post
相同,都将储存到source/_posts
文件夹
布局 | 路径 | 路径 |
---|---|---|
post | 文章 | source/_posts |
draft | 草稿 | source/_drafts |
page | 文件夹+index页 | source |
- 根据
_config.yml
中default_layout
的设置,默认布局是post
。 - 当文章中的布局被禁用(
layout: false
),它将不会使用主题处理。 - 然而,它仍然会被任何可用的渲染引擎渲染:如果一篇文章是用 Markdown 写的,并且安装了 Markdown 渲染引擎(比如默认的
hexo-renderer-marked
),它将被渲染成HTML
。 - 除非通过
disableNunjucks
设置或渲染引擎
禁用,否则无论布局如何,标签插件 总是被处理
禁用布局
如果你不希望一篇文章(post/page)使用主题处理,请在它的 front-matter
中设置 layout: false
。
文件名称
Hexo
默认以标题做为文件名称,但您可编辑 new_post_name
参数来改变默认的文件名称。
举例来说,设为 :year-:month-:day-:title.md
可让您更方便的通过日期来管理文章。
变量 | 描述 |
---|---|
:title | 标题(小写,空格将会被替换为短杠) |
:year | 建立的年份,比如, 2023 |
:month | 建立的月份(有前导零),比如, 03 |
:i_month | 建立的月份(无前导零),比如, 3 |
:day | 建立的日期(有前导零),比如, 01 |
:i_day | 建立的日期(无前导零),比如, 1 |
草稿
刚刚提到了 Hexo
的一种特殊布局:draft
,这种布局在建立时会被保存到 source/_drafts
文件夹,
您可通过 publish
命令将草稿移动到 source/_posts
文件夹,
该命令的使用方式与 new
十分类似,您也可在命令中指定 layout
来指定布局。
1 | hexo publish [layout] <title> |
例如:1
hexo new draft hello-word-draft
草稿默认不会显示在页面中,您可在执行时加上 --draft
参数,或是把 render_drafts
参数设为 true
来预览草稿。
模版(Scaffold)
在新建文章时,Hexo
会根据 scaffolds
文件夹内相对应的文件来建立文件,例如:1
hexo new photo "My Gallery"
在执行这行指令时,Hexo
会尝试在scaffolds
文件夹中寻找 photo.md
,并根据其内容建立文章,以下是您可以在模版中使用的变量:
变量 | 描述 |
---|---|
layout | 布局 |
title | 标题 |
date | 文件建立日期 |
支持的格式
Hexo
支持以任何格式书写文章,只要安装了相应的渲染插件。
例如,Hexo
默认安装了 hexo-renderer-marked
和 hexo-renderer-ejs
,
因此你不仅可以用Markdown
写作,你还可以用EJS
写作。如果你安装了hexo-renderer-pug
,你甚至可以用Pug模板语言
书写文章。
只需要将文章的扩展名从md
改成ejs
,Hexo
就会使用hexo-renderer-ejs
渲染这个文件,其他格式同理。
了解Hexo项目中md文件
了解Hexo项目中md文件
简单介绍下 .md 的结构
.md
是Markdown
的扩展名
Markdown
一种轻量级标记语言,Markdown
允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTML)文档。Markdown
对于图片,图表、数学式都有支持。- 具体的语法使用规范,详情请参考 Markdown详情
.md 文件中的结构
顶部结构
Front-matter 是 Markdown 文件最上方以”---”
分隔的区域,用于指定个别档案的变数。
Page Front-matter
用于页面配置Post Front-matter
用于文章页配置
Page Front-matter 页面配置
Front-matter 是文件最上方以 —- 分隔的区域,用于指定个别文件的变量,例如:
1 | --- |
以下是预先定义的参数,您可在模板中使用这些参数值并加以利用,参考文档
类型名 | 是否必需 | 描述 |
---|---|---|
abbrlink | 【可选】 | 文章系统标识 |
title | 【必需】 | 页面标题 |
date | 【必需】 | 页面创建日期 |
type | 【必需】 | 标签、分类、友情链接三个页面必需配置 |
updated | 【可选】 | 页面更新日期 |
description | 【可选】 | 页面描述 |
keywords | 【可选】 | 页面关键字 |
comments | 【可选】 | 显示页面评论模块(默认true) |
top_img | 【可选】 | 页面顶部图片 |
mathjax | 【可选】 | 显示mathjax(当设置mathjax的per_page: false时,才需要配置,默认false) |
katex | 【可选】 | 显示katex(当设置katex的per_page: false时,才需要配置,默认false) |
aside | 【可选】 | 显示侧边栏 (默认true) |
aplayer | 【可选】 | 在需要的页面加载aplayer的js和css,请参考文章下面的音乐配置 |
highlight_shrink | 【可选】 | 配置代码框是否展开(true/false)(默认为设置中highlight_shrink的配置) |
Post Front-matte 文章页配置
1 | --- |
类型名 | 是否必需 | 描述 |
---|---|---|
title | 【必需】 | 文章标题 |
date | 【必需】 | 文章创建日期 |
updated | 【可选】 | 文章更新日期 |
tags | 【可选】 | 文章标签,所有标签都是同级并列的 |
categories | 【可选】 | 文章分类 |
keywords | 【可选】 | 文章关键字 |
description | 【可选】 | 文章描述 |
top_img | 【可选】 | 文章顶部图片 |
cover | 【可选】 | 文章缩略图(若没有设置top_img,文章页顶部将显示缩略图, 可以设为:false/图片地址/留空) |
comments | 【可选】 | 显示文章评论模块(默认 true) |
toc | 【可选】 | 显示文章TOC(默认为设置中toc的enable配置) |
toc_number | 【可选】 | 显示toc_number(默认为设置中toc的number配置) |
toc_style_simple | 【可选】 | 显示 toc 简洁模式 |
copyright | 【可选】 | 显示文章版权模块(默认为设置中post_copyright的enable配置) |
copyright_author | 【可选】 | 文章版权模块的文章作者 |
copyright_author_href | 【可选】 | 文章版权模块的文章作者链接 |
copyright_url | 【可选】 | 文章版权模块的文章连结链接 |
copyright_info | 【可选】 | 文章版权模块的版权声明文字 |
mathjax | 【可选】 | 显示mathjax(当设置mathjax的per_page: false时,才需要配置,默认 false) |
katex | 【可选】 | 显示katex(当设置katex的per_page: false时,才需要配置,默认 false) |
aplayer | 【可选】 | 在需要的页面加载aplayer的js和css,请参考文章下面的音乐 配置 |
highlight_shrink | 【可选】 | 配置代码框是否展开(true/false)(默认为设置中highlight_shrink的配置) |
aside | 【可选】 | 显示侧边栏 (默认 true) |
JSON Front-matter
除了 YAML
外,你也可以使用 JSON
来编写 Front-matter
,只要将 ---
代换成 ;;;
即可。1
2
3"title": "Hello World",
"date": "2013/7/13 20:46:25"
;;;
文章加密插件
存在2个问题
加密过的文章,使用的yml中
代码配置
失效,代码块的高度异常
未解决:这个暂时没找到解决方法本地运行正常,发版后域名访问,输入密码后无响应。
原因:博主域名访问使用的http协议,更改网站为https协议
可以参考Github的解决方案:【输入密码之后没反应 console报错】
- 安装依赖,在根目录执行以下命令
1
npm install --save hexo-blog-encrypt
- Markdown文件,Front matter配置方法
1
2
3
4
5
6
7
8
9
10
11
12
13---
title: Hello World
tags:
- 作为日记加密
date: 2023-03-01 12:00:00
password: 123456
abstract: 有东西被加密了, 请输入密码查看.
message: 您好, 这里需要密码.
theme: xray
wrong_pass_message: 抱歉, 这个密码看着不太对, 请再试试.
wrong_hash_message: 抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容.
--- - 文章末尾添加一段代码,避免输入密码后不能正常打开文章
1
2
3
4
5<script>
// trigger event
var event = new Event('hexo-blog-decrypt');
window.dispatchEvent(event);
</script> - 重新编译项目,并进入对应的文章页即可看到加密效果
- 如果觉得弹窗提示效果差,可以去修改底层
全局检索,下面这个代码。路径大概是在【/项目/node_modules/hexo-blog-encrypt/lib/hbe.js】最后替换成好看的通知框。博主是用的【Snackbar通知框】1
2alert(wrongPassMessage);
alert(wrongHashMessage);1
2
3
4
5
6
7
8Snackbar.show({
pos: 'top-center',
backgroundColor: '#000000',
text: wrongHashMessage,
textColor: '#FFFFFF',
showAction: false,
duration: 5000
});
分类和标签
只有文章支持分类和标签,您可以在 Front-matter
中设置.参考文档。
分类具有顺序性
和层次性
,也就是说 Foo, Bar 不等于 Bar, Foo;而标签没有顺序和层次。
与使用过WordPress
的分类方式不同,Hexo
不支持指定多个同级分类。
1 | categories: |
会使分类 Life 成为 Diary 的子分类,而不是并列分类。因此,有必要为您的文章选择尽可能准确的分类。
如果你需要为文章添加多个分类,可以尝试以下 list 中的方法。
1 | categories: |
此时这篇文章同时包括三个分类: PlayStation 和 Games 分别都是父分类 Diary 的子分类,同时 Life 是一个没有子分类的分类。