Hexo 静态博客指南:建站教程(中)
本文最初发布于我的个人博客Bambrow's Blog,采用 BY-NC-SA 许可协议,转载请注明出处。若有后续更新,将更新于原博客。欢迎去我的博客阅读更多文章!
本文详细记录一下站点建立过程,以便查阅。对于具体的细节则不会做过多解释,主要展示步骤。这一篇主要讲述更换NexT
主题以及后续维护的相关内容。
本文运行环境:
npm: 6.14.7
hexo: 4.2.1
hexo-cli: 3.1.0
NexT: 8.0.0-rc.4
更换主题
我们这里选择的是NexT
主题。Hexo
支持许多主题,你也可以选择自己喜欢的主题。
安装NexT
NexT
是非常流行的Hexo
主题。根据这个网站,该项目几经易手,经历过很多不同的版本。我们现在当然是采用目前的最新版本。
首先我们运行hexo -v
与npm -v
查看一下Hexo
与Node.js
的版本,确保它们大于这个链接里所示的版本最低要求。
以下步骤主要参考了NexT
官方文档。还是在博客的根目录里,运行如下命令:
git clone https://github.com/next-theme/hexo-theme-next themes/next
等待运行完毕,新主题就下载好了。这里需要区分的是,我们现在有了两个名为_config.yml
的文件。一个是根目录下的_config.yml
,这代表着站点的配置文件;还有一个是themes/next/_config.yml
,这代表着这个主题的配置文件。要注意区分它们。
下一步,我们打开站点配置文件_config.yml
,找到theme
那一行并改为theme: next
,主题就更换完毕了。你可以运行hexo clean; hexo g; hexo s
来查看效果。
设置git submodule
如果此时你尝试使用git add .
,你会发现会有如下的warning:
warning: adding embedded git repository: themes/next
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint:
hint: git submodule add <url> themes/next
hint:
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint:
hint: git rm --cached themes/next
hint:
hint: See "git help submodule" for more information.
这是因为themes/next
文件夹来源于另外的git
项目,因此无法上传。在这里有许多解决办法,其中一个办法是删除themes/next
里的.git
文件夹。这并不是一个好办法,因为这样的话就无法再通过git pull
更新themes/next
模块。因此,比较好的办法是设置git submodule
。
注意,使用本文的办法后,将不再推荐修改themes/next/_config.yml
文件。因为修改该文件可能在更新主题时会造成本地修改与远程更新的冲突。当然,这也可以通过git stash
、git pull
、git stash pop
然后修复conflicts来解决,但总归是比较麻烦。如果你需要深度定制该主题,建议fork一份改主题源代码到自己的GitHub上,然后将自己fork后的仓库作为submodule
。具体的做法可以参考网上的其他教程。这里假设你不会再修改themes/next/_config.yml
文件(放心,还有其他方法可以更改主题设置)。
在添加submodule
之前先做一点准备工作:
git rm -r --cached themes/next
然后运行:
git submodule add https://github.com/next-theme/hexo-theme-next themes/next
这会在你的根目录下添加.gitmodules
文件,内容如下:
[submodule "themes/next"]
path = themes/next
url = https://github.com/next-theme/hexo-theme-next
在这之后,如果你想更新NexT
主题的代码,可以使用git submodule update --remote
命令。你也可以进入themes/next
文件夹使用git pull
。
让我们提交这一次修改:
git add .
git commit -m "change theme"
git push origin master
修改主题配置
前文推荐不要修改themes/next/_config.yml
文件。我们想要自定义一些配置,该怎么做呢?官方教程给出了答案。
在这里,有两种修改方式,一种是Hexo-Way,也就是把所有设置都放在根目录的_config.yml
里。还有一种是NexT-Way,也就是把主题设置放在source/_data/next.yml
里。这里我们选择后者。
我们新建文件夹并复制文件:
mkdir -p source/_data
cp themes/next/_config.yml source/_data/next.yml
随后,你就可以修改source/_data/next.yml
里的内容了。这里讲几个主要的配置。
主题样式与暗色模式
主题样式在# Schemes
下面。一共有四种样式,分别是Muse,Mist,Pisces和Gemini。其中前两种是单栏样式,后两种是双栏样式,如果要更改,只需注释掉当前样式,再取消注释想要更改的样式即可。
在下方的Dark Mode选项里,你可以选择为网页开启暗色模式,只需要把false
变成true
即可。
菜单与侧边栏项目
在# Menu Settings
下面你可以选择开启菜单项目。它们都是默认关闭(被注释掉)的。需要哪一项,取消注释即可。
注意,除了home
与archives
,其他的页面需要手动添加。比如,你想要开启about
页面,那么就要在Hexo
根目录下运行:
hexo new page "about"
随后在source
文件夹下面就会生成about
目录,里面有index.md
文件。你可以更改文件内的标题,随后在date
行下面加一句:
+ type: "about"
如果需要还可以加上comments: false
来为这个页面关闭评论(后文会讲到如何添加评论功能)。
就大功告成了。你可以随意编辑这个页面。你也可以自定义菜单项目,甚至可以嵌套项目,具体做法可以查看官方教程。
这里举个简单的例子,假如我们要新建一个菜单项目叫做notes
,首先在# Menu Settings
的menu
下面新建一行:
menu:
home: / || fa fa-home
about: /about/ || fa fa-user
tags: /tags/ || fa fa-tags
categories: /categories/ || fa fa-th
archives: /archives/ || fa fa-archive
#schedule: /schedule/ || fa fa-calendar
#sitemap: /sitemap.xml || fa fa-sitemap
#commonweal: /404/ || fa fa-heartbeat
+ notes: /notes/ || fa fa-sticky-note
图标的代码可以去Font Awesome网页上查找。随后如前面的例子,手动添加页面即可。如要添加自定义菜单的中文翻译,需要新建source/_data/languages.yml
文件,然后写入如下内容:
zh-CN:
menu:
notes: 笔记
任何翻译都可以在这个文件里设置或覆盖。
此外,在# Sidebar Settings
下面可以找到关于侧边栏的一些设置。除了它本身的一些参数,你还可以设置其中的一些内容,比如social
下面可以开启你的社交网络账号与主页。另外,搜索back2top
还可以让你把回到首页的按钮放在侧边栏,并开启阅读进度百分比功能。
网站图标与头像
网站图标可以在# Site Information Settings
的favicon
下面找到。默认读取的图标位于themes/next/source/images/
下面。我们当然不应该修改themes/next
里面的内容,因此如果要更换,可以把图标放在source/images/
目录里(如果没有这个目录就自己新建)。教程还推荐了这个网站来生成你自己的图标。
头像则在侧边栏设置的# Sidebar Avatar
下面。你可以把头像放在source/uploads/
目录里(如果没有这个目录就自己新建)。
知识共享许可协议设置
Creative Commons设置可以搜索creative_commons
。它支持多种协议,默认是by-nc-sa
。更多协议可以参考维基百科的解释。
代码块样式
你可以在这里查看并选择你喜欢的样式,随后搜索codeblock
修改。你还可以打开复制按钮,方便读者复制代码块里的内容。
阅读进度、书签与GitHub横幅
搜索reading_progress
即可开启阅读进度功能。还可以在bookmark
开启书签功能,读者可以选择点击书签图标来保存阅读进度,下次进入这篇文章时就可以继续阅读。
下面的github_banner
可以让你开启GitHub横幅,它会在网页右上角显示一个小横幅,直通你的GitHub主页。
字体设置
在# Font Settings
可以更改字体设置,NexT
允许你更改全局字体、网站标题字体、h1-h6
标题字体,文章字体与代码字体。如果你的定制程度比较高,还是参看官方教程比较好。
设置中英文自动空格
这个功能已经内置在NexT主题中。在source/_data/next.yml
中搜索并开启pangu
即可。
增加第三方服务
同样,官方教程还是比较详细的,解释了很多第三方插件的用法,囊括了数学公式、评论系统、网站统计与分析、评分与分享小部件、搜索功能、即时聊天室等等。这里只讲一下我个人开启的服务。
LeanCloud阅读统计功能
这部分参考了这篇文章。
注册LeanCloud时,建议注册国际版,国内版要验证的东西比较多。然后新建一个应用,名字可以任意写。随后打开应用,点击存储条目下的结构化数据,然后点击创建Class,名称为Counter,其他保持默认。随后去设置里的应用Keys
记下AppID
与AppKey
。
打开source/_data/next.yml
,搜索leancloud_visitors
,将其打开,填写刚才的AppID
与AppKey
,security
也设置为打开。随后的步骤比较多且复杂,请参考上面的文章,但是介于现在LeanCloud又有更新,所以做一点补充说明。
首先,上面的参考文章里,需要打开NexT主题配置文件的时候,我们统一打开
source/_data/next.yml
。要时刻记住NexT主题的目录不要修改。
其次,在博客配置文件_config.yml
里,在theme:next
后面(你也可以添加到别的位置)添加的内容是:
leancloud_counter_security:
enable_sync: true
app_id: 你的AppID
app_key: 你的AppKey
username: 你用"hexo lc-counter register"注册的用户名
password: 你用"hexo lc-counter register"注册的密码
记得在这之前要安装:
npm install hexo-leancloud-counter-security
然后,在配置deploy
的时候,因为我们多加了一项,所以应该改为:
deploy:
- type: git
repo: 你的GitHub目录地址
branch: master
- type: leancloud_counter_security_sync
也就是每一个type
前面都要加上-
。
随后,在设置Counter的权限时,我们在add_field
与create
均选择指定用户,随后在用户名里输入你用hexo lc-counter register
注册的用户名,它会自动找到对应的用户。在设置完后,两项都应该显示0 Role, 1 User
。对于delete
,选择指定用户留空即可,会显示显示0 Role, 0 User
。
Valine评论系统
在前一步的基础上,在source/_data/next.yml
找到# Valine
,将其打开,并且填写appId
与appKey
。在这里,我们把visitor
设置为true
,随后把上一步的leancloud_visitors
下的enable
设置为false
,因为两者之间有冲突。
不蒜子网页计数器功能
这个功能可以显示网站的浏览量和访客数。在source/_data/next.yml
里找到busuanzi_count
,将其打开,因为我们已经开启了LeanCloud的计数功能,所以将post_views
关掉(否则文章内部的阅读次数会有异常),其他保持打开即可。
如果在本地测试,你会发现统计数据非常大,这是因为不蒜子通过域名统计,所以localhost:4000
的数字会比较大,不必担心。
Local Search搜索功能
首先在根目录安装:
npm install hexo-generator-searchdb
随后,在博客配置文件_config.yml
里加入:
search:
path: search.xml
field: post
format: html
limit: 10000
然后在source/_data/next.yml
里打开local_search
。
Word Counter字数统计与阅读时长功能
首先在根目录安装:
npm install hexo-word-counter
随后,在博客配置文件_config.yml
里加入:
symbols_count_time:
symbols: true
time: true
total_symbols: true
total_time: true
exclude_codeblock: false
awl: 4
wpm: 275
suffix: "mins."
需要注意的是,如果插件需要安装新的包,而你像我一样设置了自动部署,那么你可能需要更新一下你的工作流,在安装Hexo
那一步加一些步骤,安装这些依赖。修改.github/workflows/main.yml
的内容,将新的依赖安装写在npm install
那一行后面即可。
Hexo 静态博客指南:建站教程(中)的更多相关文章
- Hexo 静态博客指南:建站教程(上)
本文最初发布于我的个人博客Bambrow's Blog,采用 BY-NC-SA 许可协议,转载请注明出处.若有后续更新,将更新于原博客.欢迎去我的博客阅读更多文章! 本文详细记录一下站点建立过程,以便 ...
- 开发小白也毫无压力的hexo静态博客建站全攻略 - 躺坑后亲诉心路历程
目录 基本原理 方法1 - 本机Windows下建站 (力荐) 下载安装node.js 用管理员权限打开命令行,安装hexo-cli和hexo 下载安装git 初始化hexo 使用hexo gener ...
- [5]Hexo静态博客绑定域名及域名解析
示例: http://zsy.xyz/ 前提预设:[4]Hexo静态博客背景及界面显示优化配置 [3]hexo+github搭建个人博客的主题配置 [2]hexo+github搭建个人博客的简单使用 ...
- Hexo+Github: 博客网站搭建完全教程(看这篇就够了)
本篇教程首次发布在个人博客:sunhwee.com,想要获得最佳阅读体验,欢迎前往,建议用电脑查看教程文档. # 阅读须知 注意,这篇文章篇幅较长,主要针对新手,每一步很详细,所以可能会显得比较啰嗦, ...
- 在windows下创建基于github的hexo静态博客
最近边上的人都突然买起了域名搭起了个人网站,渣渣的我介于期末没事干也跟风搭了个静态博客.虽说博客基本不更新T T,嘛嘛回归正题. 首先准备工作: 1)安装nodejs 2)安装msysgit(虽然现在 ...
- 在hexo静态博客中利用d3-cloud来展现标签云
效果: http://lucyhao.com/tags/ hexo自带的tag cloud的标签展现不太美观,想能够展现出“云”效果的标签.在网上找到了d3-cloud这个项目,github地址:ht ...
- 搭建hexo静态博客
使用hexo搭建博客,并将博客部署到github 需要的工具 Node.js Git 一个Github账号 正式开始 在任意目录下新建一个文件夹,如blog,在该文件夹下右键打开git bash he ...
- Hexo静态博客搭建教程
Hexo是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页.生成静态网页可以托管在github.下面简单介绍一下he ...
- [4]Hexo静态博客背景及界面显示优化配置
示例预览:我的主页 前提预设: [3]hexo+github搭建个人博客的主题配置 [2]hexo+github搭建个人博客的简单使用 [1]hexo+github搭建个人博客的过程记录 背景图片添加 ...
随机推荐
- css可以修改超链接颜色吗?
超链接a标签大家都应该很熟悉,这篇文章主要的讲的是a标签的基础css样式设置,下面我们来看一下css修改超链接颜色的方法. css可以使用下面几个伪类来设置超链接: a:link :是未被访问的样式, ...
- h5页面自动播放视频、音频_关于媒体文件自动全屏播放的实现方式
在移动端(ios和android)播放视频的时候,我们即使定义了autoplay属性,仍然不能自动播放.这是由于手机浏览器为了防止浪费用户的网络流量,在默认情况下是不允许媒体文件自动播放的,除非用户自 ...
- 区间dp(能量项链)
[题目大意] 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记 ...
- BZOJ 1131 [POI2008] STA-Station 题解
题目 The first stage of train system reform (that has been described in the problem Railways of the th ...
- 通过调试对WriteFile()API的钩取
通过调试对WriteFile()API的钩取 0x00 目标与思路 目标:钩取指定的notepad.exe进程writeFile()API函数,对notepad.exe进程的写入的字符保存时保存为大写 ...
- Python语法的使用和简介
前言 Python的语法和其它编程语言的语法有所不同,编写Paython程序之前需要对语法有所了解,才能编写规范的Python程序. 输入输出 print() # 打印显示input() # 输入内容 ...
- WPF 精准大小的消息气泡生成
在其他网站发布过,都是这里写的. 全部为Wpf方式,生成的气泡宽度高度较为精确. 适用任意字体以及字号,可设置图像字体.字号.行间距.字间距.阴影.气泡宽度等,在RichtextboxHelper.c ...
- 谈谈你对 TCP 三次握手和四次挥手的理解
TCP三次握手: 1.客户端发送syn包到服务器,等待服务器确认接收. 2.服务器确认接收syn包并确认客户的syn,并发送回来一个syn+ack的包给客户端. 3.客户端确认接收服务器的syn+ac ...
- uniapp,微信小程序中使用 MQTT
最近在uniapp打包成微信小程序的项目中第一次用到了MQTT.使用比较简单,但是还是遇到了一些问题.在此记录一下. 官方文档:MQTT Github 官方MQTT测试工具:MQTTX.测试工具使用说 ...
- java 面向对象(十三):面向对象的特征二:继承性 (二) 方法的重写
1.什么是方法的重写(override 或 overwrite)?子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作. 2. 应用:重写以后,当创建子类对象以后,通过子类对象调用子父类中的同 ...