NexT主题优化
博客更新清单
思路来源:https://theme-next.org/docs/
本地图片上传问题
*.md
文件中,图片路径需要写成./[文件夹名]/[图片名]
的格式;- 配置博客配置文件
/blog/_config.yml
,post_asset_folder:false
设置为true
。 - 安装插件
hexo-asset-image
:cnpm install hexo-asset-image --save
- 如果遇到
update >> /.com//[图片名]
的报错,打开/node_modules/hexo-asset-image/index.js
,修改第 24 行代码为:
1 | var endPos = link.length - 1; |
【阅读全文】的设置
在文章中使用
< !--more-->
手动进行截断。这种方法可以根据文章的内容,自己在文章合适的位置添加
< !--more-->
标签(Typora使用源代码模式添加),可以精确控制需要显示的摘录内容以外, 也可以让 Hexo 中的插件更好的识别。在文章中的
front-matter
中添加description: [...]
字段,并提供文章摘录[...]
这种方式只会在首页列表中显示文章的摘要内容,进入文章详情后不会再显示。
自动形成摘要,在主题配置文件中添加
1
2
3auto_excerpt:
enable: true
length: 150默认截取的长度为 150 字符。
推荐第 2 种方法
文章内链接样式
主题配置文件
_config.next.yml
中,设置为采用自定义样式:1
2
3
4
5
6
7
8
9
10
11
12
13# Define custom file paths.
# Create your custom files in site directory `source/_data` and uncomment needed files below.
custom_file_path:
#head: source/_data/head.njk
#header: source/_data/header.njk
#sidebar: source/_data/sidebar.njk
#postMeta: source/_data/post-meta.njk
#postBodyEnd: source/_data/post-body-end.njk
#footer: source/_data/footer.njk
#bodyEnd: source/_data/body-end.njk
#variable: source/_data/variables.styl
#mixin: source/_data/mixins.styl
style: source/_data/styles.styl/source/_data/
下新建styles.styl
作为自定义样式文件更改文章内链接文本样式(蓝色,鼠标放置其上变橙色):
1 | // 添加文章内链接文本样式 |
浏览页面的时候显示浏览进度
打开主题配置文件 _config.next.yml
:
1 | back2top: |
SideBar头像
- 打开 主题配置文件 找到
Sidebar Avatar
字段; - 设置
url
为images/[图像名]
; rounded
为图像形状,true
为圆形,false
为正方形;rotated
为是否旋转。
设置点击头像返回主页
打开
Blog\themes\next\layout\_partials\sidebar\site-overview.njk
,找到如下代码:1
2
3
4{%- if theme.avatar.url %}
<img class="site-author-image" itemprop="image" alt="{{ author }}"
src="{{ url_for(theme.avatar.url) }}">
{%- endif %}添加
a
标签:1
2
3
4
5
6{%- if theme.avatar.url %}
<a href='/'>
<img class="site-author-image" itemprop="image" alt="{{ author }}"
src="{{ url_for(theme.avatar.url) }}">
</a>
{%- endif %}
Mathjax 支持数学公式
- 主题配置文件
_config.next.yml
修改mathjax
相关选项 - 卸载原来的 Markdown 渲染插件
hexo-renderer-marked
,安装 pandoc 和hexo-renderer-pandoc
- 需要渲染的文章元数据部分添加
mathjax: true
支持 Markdown 代码形式的 mermaid 流程图
安装
hexo-filter-mermaid-diagrams
插件:1
cnpm install hexo-filter-mermaid-diagrams --save
主题配置文件
_config.next.yml
修改为:1
2
3
4
5# Mermaid tag
mermaid:
enable: true
# Available themes: default | dark | forest | neutral
theme: forest设置居中展示和最大高度。在
source/_data/styles.styl
自定义样式文件中添加:1
2
3
4
5// mermaid 图居中
.mermaid{
text-align: center;
max-height: 300px;
}WARNING NexT 更新后,对于 mermaid 的支持出现了问题,表现为无法渲染及主题无效。目前识别出的原因有:
- 代码块添加的
copy_button
干扰了mermaid.js
渲染; - mermaid 代码中的
<
和>
干扰渲染; - 主题设置无效的原因不明。
因此进行以下更改:
hexo-filter-mermaid-diagram/lib/render.js
中:1
return `${start}<pre class="mermaid">${content}</pre>${end}`;
更改为:
1
return `${start}<pre><div class="mermaid">${content}</div></pre>${end}`;
hexo-filter-mermaid-diagram/lib/render.js
中添加函数HtmlEncode
用于替换<
和>
:1
2
3
4
5
6
7
8
9
10
11const HtmlEncode =text=>{
return text.replace(/</g, '<').replace(/>/g, '>');
}
...
if (!ignore(data)) {
data.content = data.content
.replace(reg, function (raw, start, startQuote, lang, content, endQuote, end) {
content = HtmlEncode(content)
return `${start}<pre><div class="mermaid">${content}</div></pre>${end}`;
});
}
- 代码块添加的
对于主题设置无效的问题,修改
next/layout/_third-party/tags/mermaid.njk
文件:mermaid.init
修改为mermaid.initialize
。以上修改完成后,mermaid 图片能够正常渲染,正常设置主题,但是其背景为灰色,与使用模板语言生成的 mermaid 图片不同。主要在于以下设置:
1
2
3
4code, kbd, figure.highlight, pre {
background: var(--highlight-background);
color: var(--highlight-foreground);
}
本地站点推送到GitHub/Gitee上
安装插件
hexo-deployer-git
:1
cnpm install hexo-deployer-git --save
站点配置文件
_config.yml
中的 deploy:1
2
3
4
5type: git
repository:
github: git@github.com:name/name.github.io.git
gitee: git@gitee.com:name/name.git
branch: master
添加搜索功能
安装
hexo-generator-searchdb
插件1
cnpm install hexo-generator-searchdb --save
打开 主题配置文件 找到
local_search
,按如下配置修改:1
2
3
4
5
6
7
8
9
10
11
12
13# Local Search
# Dependencies: https://github.com/next-theme/hexo-generator-searchdb
local_search:
enable: true
# If auto, trigger search by changing input.
# If manual, trigger search by pressing enter key or search button.
trigger: auto
# Show top n results per article, show all results by setting to -1
top_n_per_article: -1
# Unescape html strings to the readable one.
unescape: false
# Preload the search data when the page loads.
preload: false
显示字数统计及阅读时间
安装插件
hexo-word-counter
1
cnpm install hexo-word-counter --save
主题配置文件,维持默认设置:
1
2
3
4
5
6# Post wordcount display settings
# Dependencies: https://github.com/next-theme/hexo-word-counter
symbols_count_time:
separated_meta: true
item_text_post: true
item_text_total: false博客配置文件,添加:
1
2
3
4
5
6
7
8
9symbols_count_time:
symbols: true
time: true
total_symbols: true
total_time: true
exclude_codeblock: false
awl: 4
wpm: 275
suffix: "mins."
遇到无法统计文章字数、无法显示阅读时长的情况,先运行
hexo clean
,再重新生成。
博文加密
使用插件hexo-blog-encrypt
:cnpm install hexo-blog-encrypt --save
。
在
/blog/_config.yml
中启用该插件:1
2
3
4# Security
##
encrypt:
enable: true在文章的头部添加对应字段,如
password
,abstract
,message
:1
2
3password: Mike
abstract: Welcome to my blog, enter password to read.
message: Welcome to my blog, enter password to read.可以直接更改
\Blog\scaffolds\post.md
,这是hexo new
生成文章的模板。
博文置顶
修改支持:
1
2npm uninstall hexo-generator-index --save
npm install hexo-generator-index-pin-top --save在需要置顶的文章的
Front-matter
中加上top: true
即可置顶;设置置顶标识:打开
/blog/themes/next/layout/_partials/post
目录下的post-meta.njk
文件,定位到<div class="post-meta">
标签下,插入如下代码:1
2
3
4
5
6
7
8{%- if post.top %}
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="fas fa-thumbtack"></i>
</span>
<font color="7D26CD">Top</font>
</span>
{%- endif %}
需要注意的是,NexT 8.0 使用了 Font Awesome 5
DaoVoice实现网页在线通讯
注册DaoVoice账户,打开
应用设置
,找到安装到网站
,最后一栏有用户的app_id
。打开
\Blog\themes\next\layout\_partials\head\head.njk
,添加:1
2
3
4
5
6
7
8
9{% if theme.daovoice %}
<script>
(function(i,s,o,g,r,a,m){i["DaoVoiceObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;a.charset="utf-8";m.parentNode.insertBefore(a,m)})(window,document,"script",('https:' == document.location.protocol ? 'https:' : 'http:') + "//widget.daovoice.io/widget/0f81ff2f.js","daovoice")
daovoice('init', {
});
daovoice('update');
</script>
{% endif %}在主题配置文件
_config.yml
,添加如下代码:1
2
3# DaoVoive
daovoice: true
daovoice_app_id: [app_id]在DaoVoice控制台,
应用设置--聊天设置--定制聊天窗口样式
,设定小窗口的大小、颜色和位置;hexo s
测试后提交。
注意,DaoVoice在网页上加载较慢,可能需要等待1-2分钟才能加载出来。
顶部加载进度条
- 进入
Blog/theme/next
; - 运行
git bash
安装Progress Moudle
:git clone https://github.com/theme-next/theme-next-pace source/lib/pace
; - 主题配置文件,
pace--enable true; theme flash
顶部阅读进度条
- 进入
Blog/theme/next
; - 运行
git bash
安装reading_progress
:git clone https://github.com/theme-next/theme-next-reading-progress source/lib/reading_progress
; - 主题配置文件,
reading_progress--enable true
动态背景
对于
Hexo-5.1.1
以上的版本,找到主题配置文件中的canvas_nest
,修改成true
;进入
themes/next
,安装插件theme-next-canvas-nest
:1
git clone https://github.com/theme-next/theme-next-canvas-nest source/lib/canvas-nest
添加Live2D看板娘
添加网易云音乐外链播放器
打开网页版网易云音乐,找到想要的歌曲,点击生成外链播放器;
设定
iframe
插件,播放器大小选择310x66
;打开
themes/next/layout/_macro/sidebar.njk
,在display_toc
之上添加以下代码:1
2
3
4<div id="music163player">
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=642614&auto=1&height=66">
</iframe>
</div>
注意,代码放置位置决定界面上外链播放器的位置,需要进一步研究。
网站标题栏背景变色
打开themes/next/source/css/_custom/custom.styl
打开
\source\_data\styles.styl
;添加如下代码:
1
2
3.site-meta {
background: $blue;
}
APlayer音乐播放器
安装
Aplayer
插件:1
npm install aplayer --save
进入
\Blog\node_modules\aplayer
,复制文件夹dist
至\Blog\themes\next\source
;新建
\themes\next\source\dist\music.js
文件,添加内容:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16const ap = new APlayer({
container: document.getElementById('aplayer'),
fixed: true,
autoplay: false,
audio: [
{
name: "[name]",
artist: '[artist]',
url: '[url]'
cover: '[url]',
}
{
......
}
]
})打开
themes\next\layout\_layout.njk
文件,添加如下代码:1
2
3
4<link rel="stylesheet" href="/dist/APlayer.min.css">
<div id="aplayer"></div>
<script type="text/javascript" src="/dist/APlayer.min.js"></script>
<script type="text/javascript" src="/dist/music.js"></script>添加位置位于
<body></body>
之间,<body itemscoop ...>
之后。
将放置代码放在不同的
/themes/next/layout/***.njk
文件内会有不同的效果。
music.js
具体见 Aplayer相关
添加 Valine 评论系统
注册 leancloud 国际版账号,建立应用。(网上有详细教程)
主题配置文件
_config.next.yml
中,找到Comments Settings
,修改(或添加):1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# Valine
# For more information: https://valine.js.org, https://github.com/xCss/Valine
valine:
enable: true
appId: [app id] # https://leancloud.app
appKey: [app key] # leancloud 国际版
# appid: # Your leancloud application appid
# appkey: # Your leancloud application appkey
placeholder: Hello World! # Comment box placeholder
avatar: identicon # Gravatar style
meta: [nick, mail, link] # Custom comment header
pageSize: 10 # Pagination size
language: zh-cn # Language, available values: en, zh-cn
visitor: true # Article reading statistic
comment_count: true # If false, comment count will only be displayed in post page, not in home page
recordIP: false # Whether to record the commenter IP
serverURLs: # When the custom domain name is enabled, fill it in here (it will be detected automatically by default, no need to fill in)
enableQQ: false # Whether to enable the Nickname box to automatically get QQ Nickname and QQ Avatar
requiredFields: ['nick','mail'] # Set required fields: ['nick'] | ['nick','mail']
#post_meta_order: 0安装 Valine 支持插件(next 8.2.0 移除了对 Valine 的支持)
1
npm install next-theme/hexo-next-valine --save
打开
\node_modules\hexo-next-valine\index.js
,第 53 行替换为:1
${iconText('far fa-comment', 'comments')}
这样在显示评论数的时候,显示的是
Comments
,而不是Valine
。
使用分支同步博客源代码
使用插件:hexo-git-backup
```shell npm install hexo-git-backup --save
1
2
3
4
5
6
7
8
9
10
11
12
2. 向博客配置文件中写入:
```yaml
# git backup
backup:
type: git
theme: next
message: Back up source code of my blog
repository:
github: git@github.com:alltobenice/alltobenice.github.io.git,backup
gitee: git@gitee.com:alltobenice/alltobenice.git,backuphexo backup