Hexo + NexT 深度个性化配置 (2020.1 更新)
2020.11 更新
升级版本至 Hexo v5.2.0, Next v8.0.2。部分操作产生变化,已更新。
2020.1 更新
所有操作均在Hexo v4.2.0, NexT v7.7.0 版本上验证。如有版本变化,请根据实际情况对部分步骤进行相应修改
前言
最近重新拾起博客,更新,域名迁移,重新配置,优化。这一套下来我真的,脑阔都大了!!
于是非常自觉的弹出了这么一个想法,我在这个过程中所有的操作都记录下来。一来,方便未来知道自己究竟改过些什么,其次,也可以给他人一个参考。有些前人已经踩进去过的泥潭就没有必要再去踩一遍啦!!
由于Hexo和NexT的更新还是比较频繁的,变化的幅度也相当大。所以文章的内容可能不经意间就out了。其实,归根结底,所有的博客只能是作为一个引导,具体的操作永远会因为各种各样的原因而不能照搬。希望大家可以先仔细阅读官方的文档,这样可以对Hexo+NexT有更深的理解。Hexo的官方文档相对而言比较残旧,直接完全按照官方文档来做是会遇到一头包的。NexT的官方文档相对好很多,但需要跟上更新速度。
Hexo 和 NexT本地安装
这部分网上教程茫茫多。所以懒得写了。。。哈哈!没想到吧!
大多数情况跟着官方文档直接操作即可。nodeJS跟npm的安装有时会比较tricky。
站点配置
对于站点配置,我们大多对[站点主目录]/_config.yml
文件进行修改。
Github Pages部署自定义域名
我图省事儿,就直接将博客部署在Github Pages上。同时,我又正好有一个自己的域名,所以就想要使用自己的域名。有办法吗???当然!
现在Github Pages对于自定义域名有很好的支持,并且支持HTTPS。具体操作参见这篇教程。
很清楚,照做就好了。
如果之前对域名使用过其他的CDN服务,请先取消CDN服务。否则,你使用HTTPS访问自己的域名时,浏览器左侧的小锁会没法锁上!
修改文章永久链接
默认的永久链接格式是/year/month/day/title/
这样的形式。感觉有些冗余,也不美观。所以我对其进行修改:
在主题配置文件中搜索**permalink:**,并对其进行配置。以下是我使用的配置,仅供参考:
(这里使用到了hexo-abbrlink
这个插件,需要通过npm install hexo-abbrlink --save
安装。)
1 | # URL |
双语博客配置
添加About页面
待完善
添加个性化404页面
其实如果像我一样在Github Page上部署网页,Github有提供统一的404页面。当然,如果希望可以对404页面进行个性化改造,那么就需要稍许折腾一番。
一种是直接在source
目录下创建一个404.html
文件,并将你想要的样式以及HTML源码都添加到这个文件中。同时在站点配置文件_config.yml
中,配置skip_render
:
1 |
|
也可以通过hexo new page 404
来创建一个与博客整体风格一致的404页面,然后编辑source/404/index.md
。网上很容易搜到有许多使用腾讯公益的404页面源码。
添加Sitemap
为自己的网站配置sitemap,可以有效地提升SEO。具体方法如下:
安装hexo-generator-sitemap
和hexo-generator-baidu-sitemap
。
1 | npm install hexo-generator-sitemap --save |
并在站点配置文件_config.yml
的末尾添加:
1 | sitemap: |
图片懒加载配置
注意!!不推荐在站点配置中设置图片懒加载。该功能其实已经集成在NexT主题中,如何启用详见:在NexT中启用Lazyload
前面提到过,由于网站是搭建在Github Pages上,服务器不在国内,所以对于一些图片很多的文章,文章加载会非常慢。为了解决这个问题,我们可以启用图片懒加载功能。
图片懒加载可以有效地提升网站性能和用户体验。其原理是仅先加载用户可见部分的图片,其余的都暂时先不加载。
首先安装hexo-lazyload-image
插件:
1 | npm install hexo-lazyload-image --save |
再在站点配置文件_config.yml
中添加上下列内容:
1 | # Lazyload Image |
使用
Hexo-lazyload-image
方法启用图片懒加载时,如果同时也启用了Fancybox拓展,那么可能会造成冲突。
而使用NexT集成的Lazyload库则不会与Fancybox产生冲突。缺点则是,NexT主题中的Lazyload无法配置onlypost与loadingImg。
主题配置
默认的NexT主题配置文件为:blog/themes/next/_config.yml
。
但是,!目前NexT的更新都是通过git pull的方式来获取的,每次更新需要花费很大的精力来解决冲突。
这显然不是一种科学的方法。对此,官方提出的解决方法为:
- 不需要修改
blog/themes/next/_config.yml
,而是将全部主题配置都置于Hexo站点配置文件blog/_config.yml
下。所有的主题配置都放置在theme_config:
后,并缩进两个空格。 - 不需要修改
blog/themes/next/_config.yml
,而是将全部主题配置都置于blog/themes/_data/next.yml
下。
具体的使用方法官方文档写得非常明确了。我这边选择的是第一种方法。
所以,对于需要修改的配置项,我们要做的是:
- 在
blog/themes/next/_config.yml
中找到相关配置,并复制。 - 粘帖到
blog/_config.yml
中的theme_config:
下方,并调整缩进为两个空格。 - 在
blog/_config.yml
中修改对应的配置项。
这些步骤我在下文都会用”修改主题配置文件“代替。请务必先理解这句话对应的操作是这三步。
Hexo 5.0 开始,又有另一种主题配置文件的设置方法被采用。^1 可以在站点根目录中存放一个
_config.[theme].yml
的配置文件,用来取代原来主题目录下的_config.yml
文件。
优先级最高的为主目录_config.yml
文件中,theme_config
下的配置信息。上面所说的_config.[theme].yml
其次,主题目录下的配置文件优先级最低。
基础配置
一些一看就懂的配置项,在这里一笔带过。
网站图标
在主题配置文件中将对应项的值修改为图片路径即可。
1 | favicon: |
- favicon效果
网站页脚配置
since:
设置后,页脚会显示为[开始年份] - [当前年份]。保持默认配置不变则仅显示当前年份。
icon
默认是user
小人。官方推荐使用红心(heart),可以在fontawesome中找自己喜欢的替换即可。我使用了小爪子,animated
设置为true
可以开启动画效果。也可以自己设置颜色。
powered:
和theme
配置项则用来配置是否在页脚显示Hexo和NexT的名字以及版本号。
Beian
可以用来显示网站的公安备案信息。我这边没有这个需求。
- 页脚效果
1 | footer: |
侧边栏头像配置
在主题配置文件中修改如下:
1 | # Sidebar Avatar |
- 侧边栏头像效果
添加背景动态效果
Canvas-nest安装配置
进入themes/next
目录,执行命令:
1 | git clone https://github.com/theme-next/theme-next-canvas-nest source/lib/canvas-nest |
其实就是下载canvas-next动态效果的js文件,并添加到source/lib
目录下。
在_config.yml中,在theme_config:
下添加:
1 | canvas_nest: |
enable
后面5行可以根据自己的需要进行修改。如果认为默认的参数都不错的话,那么就可以直接省略这几行。
Next 8.0.2 之后,Canvas_nest不再被原生支持。所以需要在
hexo/source/_data/
下创建footer.njk
文件
在文件中添加<script color="0,0,255" opacity="0.5" zIndex="-1" count="99" src="https://cdn.jsdelivr.net/npm/canvas-nest.js@1/dist/canvas-nest.js"></script>
,并将其中的参数修改为自己想要的值。
最后再在主题配置文件中,修改custom_file_path
,将footer: source/_data/footer.njk
的注释删除即可。
添加相关文章推荐功能
该功能需要安装依赖的插件Hexo-Related-Popular-Posts:
1 | npm install hexo-related-popular-posts --save |
再在_config.yml
中对主题进行配置:
1 | related_posts: |
启用Hexo NexT本地搜索
NexT主题中,搜索功能支持多种搜索服务,其中最常用的是本地搜索和Algolia搜索两种。
- Algolia搜索借助Algolia提供的SaaS搜索服务,实现文档的搜索功能。
- 本地搜索通过
hexo-generator-searchdb
插件,在本地生成search.xml。该文件作为一个小型的数据库,配合js脚本实现了本地搜索的功能。
首先,安装插件:
1 | npm install hexo-generator-searchdb --save |
再修改配置文件_config.yml
,启用本地搜索功能:
1 | local_search: |
代码块样式修改
在主题配置theme_config
下添加:
1 | codeblock: |
本来的注释中就已经有了比较详细的说明,所以就不多做介绍了。根据自己的需要设置即可。
文章页面阅读进度显示
返回页面顶部按钮
在主题配置theme_config
下添加:
1 | back2top: |
启用后,可以在页面右下角显示一个返回页面顶部的小按钮。如果scrollpercent
设置为true
,则在这个按钮中会显示页面的阅读进度数值。
而sidebar
设置为true
时,该按钮将与侧边栏结合到一起:
页面顶部进度条
在主题配置中直接找到reading_progress
。将其添加到站点配置文件_config.yml
中的theme_confg
下。
1 | # Reading progress bar |
但是,尝试一次以后发现并没有产生效果。后来,经过搜索发现,该功能同样依赖theme-next-reading-progress
拓展来实现。由于默认配置文件中的注释里没有提到,所以我一开始完全没意识到需要安装。
1 | cd themes/next |
通过上述命令完成安装即可。
开启文章页面加载进度条
2021.09.02 更新: Theme-Next在版本8.7.1的更新中将该插件引入作为默认的进度条插件
与阅读进度条类似,首先安装拓展theme-next-pace
:
1 | cd themes/next |
安装完成后,在主题配置theme_config
下添加配置:
1 | # Progress bar in the top during page loading. |
主题theme:
可以设置为自己喜欢的样式,这里我设置为了 center-radar 的样式。在这个页面可以看到所有样式的demo。
顺带提一下,当前版本的NexT没有办法在配置文件中直接修改该组件的颜色,如果你觉得组件的颜色与自己的博客无法搭配,那么可以进入到
themes/next/source/lib/pace/pace-theme-[你要用的主题].min.css
,找到border-color:#29d
将RGB变量修改为你需要的颜色。
站点首页不显示文章全文
其实,最佳的方法是在文章中间加入<!-- more -->
来精确控制文章的摘要预览。
同时,NexT还提供了 Auto Excerpt 的功能来实现对文章的自动截取。
在主题的配置文件中可以找到excerpt_description: true
。这项在当前版本是默认开启的。所以我们不需要进行额外配置。
启用评论模块
开启赞赏功能
NexT 主题还内置了打赏的功能。首先在theme_config
下,添加
1 | # Reward (Donate) |
然后将微信支付,支付宝的收款二维码图片保存为上述的路径。重新生成后就可以在文章底部看到打赏的按钮了。
启用Lazyload图片懒加载
首先在主题配置文件中,配置
1 | lazyload: true |
并添加本地js第三方库:
1 | cd themes/next |
或者,也可以直接在主题配置中启用第三方CDN
1 | vendors: |
在hexo cl && hexo g
之后,进入自己的网页,随意对任一图片进行”审查元素”.
如果你的img
元素中包含data-loaded="true"
,那就说明Lazyload已经生效。
启用Fancybox图片效果
首先在主题配置文件中,配置
1 | fancybox: true |
并添加本地js第三方库(Fancybox2 或 Fancybox3 任选一个):
1 | cd themes/next |
或者,也可以直接在主题配置中启用第三方CDN (同样根据自己的需要选择版本)
1 | vendors: |
在hexo cl && hexo g
之后,进入自己的网页,就可以看到网页上的图片都可以点开放大浏览了。
配置第三方CDN
对于这一部分的内容,其实前面在插件介绍中也已经有所涉及了。NexT提供了CDN配置的功能,如果你对某个插件进行了CDN的配置,那么页面在加载时,将会从CDN来下载相关的js脚本。如果配置为空,则会在本地目录读取对应的文件。
在加载页面时,可以在Chrome中按F12进入开发者菜单,点击Network
标签,可以看到页面在加载时,哪些文件耗费了比较长的时间。如果启用了一些比较大的插件,如Busuanzi
,Valine
,那么使用CDN来加载静态文件,可以有效地加速页面的加载速度。
在主题配置文件themes/next/_config.yml
中,搜索vendors:
即可找到第三方CDN的配置项。
1 | vendors: |
这里定义了如果某插件的CDN没有进行配置,那么就会在themes/next/source/lib/
目录下,加载插件所需的静态文件。
然后根据自己启用插件的情况,将需要的行添加到主题配置themes_config
下。这里贴出我启用的配置,仅供参考:
1 | vendors: |
添加文章评分功能
在主题配置文件themes/next/_config.yml
中搜索rating
,找到相关的配置。将其添加到主题配置theme_config
下:
1 | # Star rating support to each article. |
根据注释说明打开https://widgetpack.com ,首页点击”Rating”,然后点击页面中间红色的”Get it Free”。页面会跳转到注册页面,注册帐号。
点开左上角菜单,选择 Rating -> Setting ,可以把 Vote via
修改成 Device或是IP address。这样用户无需登录就可以打分。
菜单中 Site -> Setting ,可以将Private勾上。
NexT内置主题样式美化
这一部分其实主要是对样式进行自定义修改,基本思路就是在自定义的样式文件中加入对应元素的css属性设置。
侧边栏圆角
打开themes/next/source/css/_variables/Gemini.styl
,根据启用的不同主题,选择相应的文件。这里修改的是Gemini.styl
。
在文件中修改代码:
1 |
参考文档: