Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用hexo生成静态网页。
¶零、搭建hexo环境
要搭建hexo+github的个人博客,首先需要确保安装了git和node.js。
¶1. 安装和配置git
关于git的安装和配置请参考《Windows10安装git并连接github》,确保git安装成功并能上传文件到github仓库。
温馨提示:一定要配置好ssh key,参考的教程中有指导。
¶2. 安装node.js
git安装配置好后还要安装node.js,请至官网下载node.js。
node.js的具体安装从头到尾傻瓜式“下一步”。不过安装路径建议选择非系统盘目录。安装好后,检测PATH环境变量是否配置了Node.js,打开cmd 或者安装好git后的git bash,输入如下命令:
1 | node --version |
出现node.js的版本信息则说明安装成功。
¶3. 安装hexo
以上都完成后打开git bash输入:
1 | npm install -g hexo-cli #使用 npm 安装 Hexo |
出现如下信息表示下载并安装完成。
¶5. 使用hexo
安装 Hexo 完成后,在任意目录执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件:
1 | hexo init myblog # 初始化hexo工作区,此时myblog是工作区 |
💁♂不要输入
$
和#
及其之后的注释内容。
新建完成后,指定文件夹的目录如下:
1 | . |
编译并运行
1 | hexo g # 编译生成静态文件 |
执行以上命令之后,hexo就会在 public
文件夹生成相关 html
文件,这些文件将来都是要提交到github去的。hexo s
是开启本地预览服务,打开浏览器访问 http://localhost:4000 即可看到内容,很多人会碰到浏览器一直在转圈但是就是加载不出来的问题,一般情况下是因为端口占用的缘故,可以使用:
1 | hexo s -p port #自定义端口方式启动hexo服务。 |
其他命令:
1 | hexo clean #清理public的内容 |
¶一、 编写文章
首先要在 myblog/source
目录下创建一篇文章,命名为:name.md
,如:first-article.md
。
或者用hexo创建一篇文章,打开git bash输入:
1 | hexo n first_article |
完成后 source/_posts
目录下会多出 first-article.md
文件。 如下图:
打开 first-article.md
,修改表头后开始通过markdown语法来书写文章。 内容如下:
1 | --- |
其中 categories
是给分类栏添加分类项,或者将文章归纳到"碎碎念"分类项里;而 tags
表示的是文字的标签,可以写多个,比如我写了 分享
和 first
。
完成后编译并运行
1 | hexo g |
然后浏览器访问测试博客,你会发现分类菜单和标签菜单里就会有内容显示了。
¶二、更换主题
可以到hexo官方主题下载主题模板。在这里我推荐使用next主题,文档齐全,社区也活跃。官网:http://theme-next.iissnan.com
下载主题包后放到 myblog/themes/
下。比如我们要用next主题(使用对的版本是5.1.4),则可以进入 myblog/themes/
目录下然后执行命令:
1 | git clone https://github.com/iissnan/hexo-theme-next.git |
然后修改 myblog/_config.yml
中的 theme: landscape
改为 theme: next
完成后重新编译并并运行测试。
¶三、上传hexo到github
(1)首先要登录github创建一个 user.github.io
仓库,仓库名比较特殊,如:qcmoke.github.io
,此处的 qcmoke
为你的github用户名,github正是通过这个仓库免费生成与该仓库名相同的域名,注意github只为每一位用户提供一个这样带有免费域名的 github page
。
💁♂说明:
除了
user.github.io
这样特殊名称的仓库外,当然其他任意名称的仓库也可以设置pages服务,只是不提供域名罢了,但也能通过user.github.io/仓库名称
或者设置自定义域名的方式访问pages页面。
(2)安装git文件上传插件
1 | npm install hexo-deployer-git --save |
打开全局配置文件 myblog/_config.yml
,找到 deploy
并进行如下修改:
1 | deploy: |
其中repository的值是你git远程仓库的地址。
(3)提交部署
如果你上面都配置好了,发布上传很容易,只要一句命令就能搞定。
1 | 这条命令会将public目录的文件提交上传到git远程仓库 |
💁♂ 注意:
本地安装好后ssh key一定要配置好。 因为上传文件到github的过程中需要。
(4)访问 https://qcmoke.github.io
进行测试
💁♂注意:
这个请求地址用你自己的,即
https://user.github.io
¶四、更换主题布局
next提供了4种布局供选择,我这里选的是Gemini。打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 Scheme Settings
找到如下代码块,并在 scheme: Muse
的前面添加 #
,然后去掉 #scheme: Gemini
前面的 #
,修改后如下:
1 | # --------------------------------------------------------------- |
完成后重新编译运行测试,你会发现博客的主题布局已经变了。
¶五、菜单栏添加菜单选项
next默认菜单栏只有 home
和 archives
菜单选项,你可以添加更多的菜单选项,比如这里我们添加 tags
和 categories
。只需打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 Menu Settings
找到如下图代码块,然后将 tags
和 categories
选项前的注释符号 #
去掉就能启用这两个菜单。如下图:
💁♂提示: NexT 使用的是 Font Awesome 提供的图标,可以去Font Awesome获取自定义的图标。
完成后重新编译并运行,然后浏览器输入http://localhost:4000/,你会发现多出来了两个菜单选项。如下图:
虽然是有了这两个菜单选项,但当你点击这些新菜单时会发现只有类似 Cannot GET /tags/
这样的提示。此时你肯定会手足无措。别担心,之所以会有这样的提示,是因为next默认只启动了这两个菜单项,然并没有找到 tags
和 categories
页面,你需要做的是创建这两个页面,创建的过程很简单,并不需要你有什么编程基础,你只需要输入以下命令hexo就能帮你生成这两个页面。
在站点根目录下打开你心爱的git bash。然后输入以下两条命令:
1 | hexo n page tags |
完成后你会发现 myblog/source/
目录会出现两个文件夹,如下图:
打开 myblog/source/categories
目录下的 index.md
,修改内容为以下:
1 | --- |
打开 myblog/source/tags/
目录下的 index.md
,修改内容为以下:
1 | --- |
完成后重新编译并运行,此时你再打开浏览器输入http://localhost:4000/,点击 tags
和 categories
菜单时会发现已经可以打开页面了。
¶六、默认中文简体显示设置
打开全局配置文件 myblog/_config.yml
,搜索找到 language
,改为以下:
1 | language: zh-Hans |
如图:
这里的 zh-Hans
要根据 myblog/themes/next/languages
目录下的语言配置文件的名称来设置,也有可能是 zh-CN
。(如在此目录里打开 zh-Hans.yml
文件,发现里面是简体中文,那就对了,注意:这里的文件的名称不填文件后缀名 .yml
)
完成后重新编译并运行测试,效果如下:
¶七、更改博客作者名和主页地址
打开 myblog/_config.yml
全局配置文件,搜索关键词 Site
找到如下图的地方
然后修改以下三处:
1 | title: Qcmoke's Blog #站点名称 |
完成后重新编译并运行,效果如下图:
¶八、启用侧边栏社交链接
打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 Social
找到下图位置:
根据自身情况进行修改或者添加,注意:一定要去掉 #social:
前的 #
才能生效。我的如下图:
完成后重新编译并运行,效果如下图:
¶九、启用友情链接
打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 Blog rolls
找到下图位置:
根据自身情况进行修改或者添加,注意:一定要去掉 #links:
前的 #
才能生效。我的如下图
完成后重新编译并运行,效果如下图:
¶十、开启打赏功能
首先要将支付宝和微信的收款码图片放到 myblog/themes/next/source/images
目录里。
打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 reward
找到下图位置:
根据自身情况进行修改或者添加,注意:一定去掉元素前面的 #
才能生效。我的如下:
1 | Reward |
完成后重新编译并运行,浏览器访问博客时,你会发现每篇文章底部就会有打赏的小图标了。
¶十一、设置头像
找一张你喜欢的头像图片放入 myblog/themes/next/source/images
目录中,例如我这里放了一张 logo.jpg
。然后打开 myblog/themes/next/_config.yml
主题配置文件。找到关键字 avatar
,在后面加入 logo.jpg
的路径地址(注意:是想相对路径)。如下图:
如果你想另外添加一个点击侧栏头像就能回到博客首页的功能,其实很简单,只需要将图片变成一个可以点击的图片链接。打开文件位置:myblog/themes/next/layout/_macro/sidebar.swig
,找到如下代码块。
1 | <img class="site-author-image" itemprop="image" |
将以上代码块外面添加一个指向博客主页的a标签。即修改成以下:
1 | <a href="/"> |
完成后重新编译并运行进行测试。
¶十二、圆形头像
打开站点下的 myblog/themes/next/source/css/_common/components/sidebar/sidebar-author.styl
文件 ,在 .site-author-image
选择器的末尾(右括号前)添加
1 | border-radius: 50%; |
在 .site-author-image
选择器右括号后另起一行,加入以下代码:
1 | .site-author-image:hover{ |
或者你可以看下面的代码会更加直观。
原来的:
1 | .site-author-image { |
修改后:
1 | .site-author-image { |
完成后重新编译并运行,效果如下图:
¶十三、设置浏览器标签图标
将一张图标32x32像素大小的图标favicon.jpg放入 myblog/themes/next/source/images
目录里,打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 favicon
,找到如下代码块,并做相应修改。
1 | favicon: |
完成后重新编译并运行,浏览器输入http://localhost:4000/访问你的博客,发现你的博客的浏览器标签图标已经变了。
¶十四、首页文章缩略描述设置
打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 auto_excerpt
找到如下位置:
1 | auto_excerpt: |
修改enable和length,修改后如下:
1 | auto_excerpt: |
完成后重新编译并运行,效果如下图:
¶十五、添加动态背景
打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 canvas
找到如下位置:
1 | # Canvas-nest |
看你喜欢哪种动态背景风格,分别有 canvas_nest
、three_waves
、canvas_lines
、canvas_sphere
四种,选择一种然后将冒号后面的 false
改成 true
。这里我选择的是第一种 canvas_nest
,改成如下:
1 | #Canvas-nest |
完成后重新编译并运行,完成后你会发现博客网页已经出现好看的动态背景了。
¶十六、增加本地搜索功能
需要安装 hexo-generator-searchdb
插件来实现这个功能,在站点的根目录下执行以下命令:
1 | npm install hexo-generator-searchdb --save |
编辑 myblog/_config.yml
全局配置文件,新增以下内容到任意位置:
1 | search: |
打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 local_search
找到如下代码,enable
默认是 false
,将 enable
设置为 true
,如下:
1 | local_search: |
完成后重新编译并运行,完成后你会发现博客菜单栏上已经出现了搜索项了。
¶十七、访问统计
next主题默认集成了一些第三方访问统计插件。其中推荐使用不蒜子统计服务或者leancloud统计服务。选择一种就行。
💁♂ 对比:
不蒜子统计:支持“本站访客数”、“本站总访问量”和“本文总阅读量”;暂不开放注册,没有用户 后台,不支持数据维护。
leancloud统计:只支持“本文总阅读量”统计;有用户后台,支持数据维护。
由于以上可看出各自的长短,所以酌情选择。如果不关心数据维护的话,我个人比较推荐使用不蒜子统计,因为简单易用。
¶1. 不蒜子统计
官网:http://busuanzi.ibruce.info
只需要打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 busuanzi_count
。 将 enable
的值改为 true
,并对站点UV配置、站点PV配置、单页面PV进行配置。如下:
1 | busuanzi_count: |
完成后重新编译并运行,你会发现每篇博客文章和网页底部已经出现了访问统计信息了。
💁♂ 温馨提示:
目前不蒜子『dn-lbstatics.qbox.me』域名过期,更换域名到『busuanzi.ibruce.info』!故你可能需要修改以下文件相关信息:
编辑 myblog/themes/next/layout/_third-party/analytics/busuanzi-counter.swig
,找到以下代码:
1 | <script async src="https://dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js"></script> |
修改为:
1 | <script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script> |
如果不蒜子又拿回原来的域名,那么再改回原来的域名吧~~~
¶2. leancloud统计
(1)登录leancloud官网注册账户。
💁♂说明:
现在leancloud官方的云服务系统是国内和国际分别运营,所以官方网址也分为国内网址和国际网址,个人建议国际的。
国内网址:https://leancloud.cn
(2)登录leancloud后台,然后创建应用
(3)创建应用完成后就得到了 appid
和 appkey
:
(4)然后设置安全域名
将你网站首页的域名请求地址填进去即可,可以防止其他人攻击。
如果你是一个开发爱好者,可以将本地localhost(包括端口号)添加进去,开发完成后再删除即可
(5)创建一个名称为Counter的Class,用于数据存储。
(6)编辑 myblog/themes/next/_config.yml
主题配置文件,添加将leancloud后台得到的 appid
和 appkey
填入配置中。如下:
1 | # Show number of visitors to each article. |
👀 注意:
enable要设置为true表示开启这个功能。
(7)如果和我一样使用的next版本是5.1.4,并且使用的leancloud是国际版(leancloud是国内版的可以跳过),就还要做兼容处理,因为国际版leancloud是后来才有的,以致于旧版的next不兼容。
修改 themes/next/layout/_third-party/analytics/lean-analytics.swig
,将其内容替换成下面:
1 | <!--切换国际版leancloud替换代码--> |
🙉注意:本地调试时不进行统计。如果看懂上面源码可以让其在本地调试是能进行统计。但小白直接复制粘贴就好,发布部署时,通过域名访问就能统计了。
为了让移动端显示更友好,我修改了 themes/next/layout/_macro/post.swig
文件,加了一个span标签进行修饰,让小眼睛和访问数值始终在同一行。
1 | {# LeanCould PageView #} |
¶3. 额外补充
由于不蒜子统计和leancloud统计都存在着一些缺失的问题,但是它们之间又冥冥中有着互补的关系,所以我通过一波考虑后,选择了折中的方案,那就是使用不蒜子统计的“本站访客数”、“本站总访问量”,而使用leancloud统计的“本文总阅读量”统计。配置如下:
1 | # Show PV/UV of the website/page with busuanzi. |
1 | # Show number of visitors to each article. |
💁♂如果你对这访问统计这一块很感兴趣并且懂点编程知识的话,你完全可以通过leancloud的sdk来开发出完整的统计功能。这样的话就可以不用不蒜子统计了。要是你还有一台可以长期使用的vps的话,你甚至可以不用leancloud的服务,而是自己实现一个访问计数的后端服务。这里我就不深入了。
¶十八、字数统计和阅读时长功能
需要安装 hexo-wordcount
这个插件来实现这个功能,在站点根目录下打开git bash,输入:
1 | npm install hexo-wordcount --save |
打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 post_wordcount
。
将其配置修改成以下代码:
1 | post_wordcount: |
完成后重新编译并运行测试。
¶十九、隐藏底部的“强力驱动”内容
打开 myblog/themes/next/layout/_partials/footer.swig
,搜索关键字 theme.footer.powered.enable
,通过 <!-- -->
注释掉如下代码。
完成后重新编译并运行,你会发现博客已经隐藏掉了底部的“强力驱动”内容了。
¶二十、文章分享功能
这里我提供了三种方案,推荐下文说的第二种方案。
¶方案1 jiathis
打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 jiathis
,找到如下代码。
1 | #jiathis: |
去掉 #jiathis:
前的 #
,并在其后添加 true
结果如下:
1 | jiathis: true |
不知道为什么有bug,无法加载出图标,也不能点击。于是恢复原样后,改用第二种方案。
¶方案2 needmoreshare2
打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 needmoreshare2
,找到如下代码并做以下修改。
1 | needmoreshare2: |
不过我发现next 5.1.4版本中微信加载不出二维码,应该是封装好的微信分享链接失效了。我是通过老版本的仓库https://github.com/iissnan/hexo-theme-next安装的,所以有这个问题,而新版本的next是没有这个问题的。新版本仓库已经搬迁到了https://github.com/theme-next 。
虽然我安装的是老版本,不过这里我也提供了解决办法。站点根目录下打开git bash,输入以下命令:
1 | rm -rf themes/next/source/lib/needsharebutton |
完成后重新编译并运行,你会发现博客已经出现分享服务图标了,并且点击微信分享图标也可以加载出分享二维码了。
¶方案3 baidushare
打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 baidushare
,找到如下代码并做修改。修改后如下:
1 | #baidushare: |
完成后重新编译并运行,你会发现博客已经出现分享服务图标了。
¶二十一、文章应用本地图片
这里我可能比较废话,你可以跳过以下几段文字直接进行插件安装和配置。但想知道问题解决的思路,还是值得看看的。
写博客时虽然可以通过第三方图床给hexo文章插入图片,但如果你和我一样总害怕哪天第三方图床提供商被无故和谐了或者关闭服务了,那么通过相对路径从本地引入图片的方案无疑是种再好不过的方案。hexo允许你在
myblog/source/images
目录下放入图片(这里的images目录如果没有需要你自己创建),当hexo编译时会将图片放入到myblog/public/images
目录里。由于部署博客其实就是部署public
目录,所以引用图片的方式也就是![](/images/image.jpg)
。因此要将博客文章引用的本地图片都存到myblog/source/images
目录里。但所有的图片都放到同一个目录里,当后期的本地图片越来越多,维护的成本也就随着越来越大了。由于以上的问题,hexo也支持通过其他目录的方式引入图片,只要修改
myblog/_config.yml
全局配置文件,将post_asset_folder:
这个选项设置为true
,然后创建markdown文章,比如通过hexo new article
在myblog/source/_posts
创建了一篇article.md
文章和同名文件夹article
,我们可以将图片image.jpg
放到这个文件夹里,在article.md
文章里通过类似![](2018/09/21/article/image.jpg)
的方式来引用图片( 此处的2018/09/21/article
是经hexo静态处理后文章和图片的存放路径,这个路径第一次编译该markdown文件的日期来生成的) 。但这样的处理导致我们在后期写markdown文章引用图片的时候必须要记住这个日期,这是很糟糕的!这也就算了,我们往往是通过markdown工具来编辑博客文章的,如果在编辑前未经过编译,hexo还未将图片转移到2018/09/21/article/
目录下,通过![](2018/09/21/article/image.jpg)
的方式插入图片,markdown工具根本无法加载出图片。由于以上种种让人想破口大骂的痛点,引发了我的一个思路,我的思路是让每篇markdown文章的图片都放在文章所在目录的同名目录里(比如文章是
myblog/source/_posts/article.md
,那么同名目录是myblog/source/_posts/article
),而在article.md
中可以使用![](article/image.jpg)
的方式来引用图片,最终经过hexo编译后图片仍然与生成静态文件的html
文章保持原有的相对路径,而不会出现上文中那一大串日期路径,这是我一直想要实现的,但遗憾的是我没找到hexo对该方案的支持。后来我找到了一个很给力的插件hexo-asset-image
,它能实现我上文提出的思路,下面就奉上教程。
(1)安装hexo-asset-image
1 | npm install hexo-asset-image --save |
(2)将全局配置文件 myblog/_config.yml
里的 post_asset_folder:
这个选项设置为 true
(3)新建一篇markdown文章做测试
1 | 执行该命令会在myblog/source/_posts/文件夹内除了生成newpage.md文件外,还生成一个同名的newpage文件夹 |
(4)引用本地图片
要插入图片时,只需要将图片放入 newpage
文件夹中,比如放入一张名为test.png的图片,那么在newpage.md中通过以下markdown语句来引用该图片:
1 | ![test](newpage/test.png) |
(5)编译并启动测试
1 | hexo g |
完成后你会发现博客中相关的文章能正常显示图片了。
💁♂ 我在另一篇文章做了一些更优的扩展,可以参考 https://qcmoke.site/blog/hexo_seo.html
¶二十二、让hexo支持emoji
如何让markdown可以解析emoji呢?实际上我们发现,在一些编辑器中输入 :blush:
并没有表情出现(当然有的编辑器可以,比如我现在使用的typora就很给力),这是为什么呢? 这是markdown编辑器渲染引擎的问题 。同样的,Hexo也要对markdown文件进行渲染,而Hexo目前默认渲染引擎是 hexo-renderer-marked
,可惜这个渲染器似乎不支持插件扩展,当然就不行了。那怎么解决呢?这里就要说 hexo-renderer-markdown-it
插件了,这个渲染器插件是支持扩展,我们可以使用这个渲染引擎来支持 emoji
表情,具体实现过程如下:
-
更换渲染器
进入blog跟目录,执行如下命令
1 | npm un hexo-renderer-marked --save #卸载hexo默认渲染器hexo-renderer-marked |
- 安装emoji插件,执行如下命令
1 | npm install markdown-it-emoji --save |
- 编辑站点配置文件
打开myblog/_config.yml
站点配置文件,添加如下内容
1 | # Markdown-it config |
完成后重新编译并运行,你会发现博客中相关的文章能正常显示 emoji
表情了。比如下面的markdown经过编译成html后,网页访问会得到这个笑脸:😄
1 | --- |
💁♂更多的
emoji
写法可参考:📚https://www.webfx.com/tools/emoji-cheat-sheet/
¶二十三、加入评论面板
¶1. Gitalk
上网找过很多与hexo相关的评论面板,但发现很多第三方的评论面板提供的评论面板都有一个致命的弱点,那就是在不可预料的一天突然在国内被和谐了,或者出现各种各样的问题,这很让人头疼。后来在网上发现有人通过调用github提供的Issues api做成了比较美观的评论面板,这其中我发现了两种,第一种是gitment,第二种就是这里要讲的gitalk。之前也尝试过加入gitment,但是发现装好后出现了各种问题。最严重的问题就是无法通过登陆评论面板进行初始化文章的评论功能,所以也就放弃了这种途径。后来在next的Telegram群里发现了gitalk这个干货,于是开始上网找各种教程尝试搭建,但在这过程中也还是发现了一些问题。所以在这里我将尽可能详细解释清楚,避免误导大家。
(1)首先你得先到github上申请一个 Github Application,由于需要调用 Github API ,首先点击注册一个 Github Application 。
申请页如下图:
参数说明:
1 | Application name: #应用名称,随意填 |
如果没有用自购的域名,Homepage URL
和 Authorization callback URL
统一填https://youname.github.io (youname是你的github用户名)。
填写完成后,点击register application。
创建成功后,会看到 clientID: XXX
和 clientSecret: XXX
这两个参数,如下图:
(2)创建一个仓库用来存放issue数据,命名可以随意,但为了和我统一,最好也命名为 gitalk
。
(3)添加gitalk.swig配置文件
在目录 myblog/themes/next/layout/_third-party/comments
下创建一个 gitalk.swig
文件。
将以下代码全部复制到 gitalk.swig
中。
1 | {% if theme.gitalk.enable %} |
(4)修改index.swig配置文件
在 myblog/themes/next/layout/_third-party/comments
目录下的 index.swig
文件最后加入以下代码:
1 | {% include 'gitalk.swig' %} |
(5)修改comments.swig配置文件
打开 myblog/themes/next/layout/_partials
目录下的 comments.swig
文件,搜索关键字 valine
找到以下代码:
1 | {% elseif theme.valine.appid and theme.valine.appkey %} |
将以上代码改成以下代码:
1 | {% elseif theme.valine.appid and theme.valine.appkey %} |
(6)修改主题配置文件
打开 myblog/themes/next/_config.yml
主题配置文件,根据自己的情况添加如下代码:
1 | # Gitalk |
为了不出错同时也方便管理,你可将这些代码放在gitment(如果之前有配置的话)板块后。如我的:
(7)部署到github
最后通过 hexo 部署你的博客,即可看到gitalk评论面板的效果。
(8)初始化每篇文章的Issue
你可能会发现还不能评论,很简单,你只需要点击 初始化Issue
,之后就要以github账号登录。登录成功后便自动完成初始化。(注意,只能通过自己的github账号来初始化)。初始化需要刷新一下,结果如下图,github用户就能通过登录github账号进行评论了。
同时存放评论数据的仓库,Issues
下也生成了Issue数据
至此,加入Gitalk评论面板完结。
¶2. Vssue
目前发现Gitalk是很好的,但是目前它只支持github代码托管平台,但碍于github服务器在国外,评论面板有时候会由于网络的原因导致无法请求api,所以这才认识到了Vssue,Vssue和Gitalk的功能差不多,它支持多个代码托管平台(GitHub、GitLab、Bitbucket、Gitee、Gitea),如果使用Gitee作为评论api的话,网络延时的问题就会得到比较好的解决。接下来就奉上教程。
(1)在目录 myblog/themes/next/layout/_third-party/comments
下创建一个 vssue.swig
文件。内容如下:
1 | {% if theme.vssue.enable %} |
(2)在 myblog/themes/next/layout/_third-party/comments
目录下的 index.swig
文件最后加入以下代码:
1 | {% include 'vssue.swig' %} |
(3)打开 myblog/themes/next/layout/_partials
目录下的 comments.swig
文件,添加如下 +
的内容:
1 | {% elseif theme.valine.appid and theme.valine.appkey %} |
(4)修改主题配置文件
打开 myblog/themes/next/_config.yml
主题配置文件,根据自己的情况添加如下代码:
1 | ## Vssue |
至此,加入Vssue评论面板完结。
💁♂ 提示:
clientId和clientSecret和Gitalk的申请差不多,可以自行去相应的git代码托管平台进行申请。当然我推荐你去参考非常详细的官方指南:https://vssue.js.org/zh/guide
¶3. Valine
¶3.1 普通版Valine
valine是一个优秀的评论系统软件,后台的评论数据依赖于leancloud的云存储,所以还需要去leancloud官网设置数据存储功能。
(1)首先就是去leancloud获取 appid
和 appkey
,怎么获取可以参考上文中的"访问统计=>leandcloud统计”。
💁♂提示: 其中
appid
和appkey
与leandcloud统计一样就行。
(2)另外,还需要在leancloud后台创建一个Comment的Class,用于数据存储。
虽然网上有人说valine会自动创建这个Class,但是我在用国际版测试的时候发现一直无权限或者提示没这个Class,那倒不如直接创建就好。
(3)修改主题配置文件,配置 valine
。修改 enable
为 true
,并且添加 appid
和 appkey
即可。
1 | # Valine. |
💁♂说明:
avatar 是设置默认头像,可以去https://valine.js.org/avatar 选择默认头像
更多详细内容请查阅valine的官方文档:https://valine.js.org
¶3.2 增强版valine
原生的普通版valine功能比较少,但由于其优秀的设计和适用场景,得到了很多开发者的青睐,因此网上出现了一些增强版的valine,这里推荐Deserts的valine版本,它除了可以做基本的评论外,还有一些比较高级的功能,比如邮件通知,后台数据管理等功能。
📚 官方文档:https://deserts.io/diy-a-comment-system
📦 项目地址:https://github.com/DesertsP/Valine-Admin
为了适配hexo next,请按照如下步骤修改:
(1)先下载相关sdk文件,放到 themes/next/source/js/src
下。
⬇️官方下载地址:
下载Valine.min.js:https://github.com/DesertsP/Valine/releases
下载av-min.js:https://code.bdstatic.com/npm/leancloud-storage@4.12.0/dist/av-min.js
(2)然后修改 themes/next/layout/_third-party/comments/valine.swig
1 | {% if theme.valine.enable %} |
这样就可以基本替代原版了,基本的评论评论功能已经可以正常使用。但如果想要一些增强功能,比如后台评论数据管理、邮件提醒和通知等,那么还需要花一些时间操作的。具体请参考官方文档完成这些工作。
官方文档:
由于官方文档中的教程已经很详细了,跟着操作基本就能完成。下面只介绍一些额外的说明:
(1)关于自定义环境变量
直接参考我下面的可以尽量避免出错。下面附上我的leancloud管理后台自定义环境变量:
💁♂补充说明:
(1)我配置的smtp账号和密码是Gmail的,当然还可以使用其他的,比如QQ,Outlook等,具体可参考这篇文章:http://help.cy-email.com/yxtj-cyyx
(2)如果机器正在启动然后就修改这些环境变量的话是需要到“部署”那里重启的。
(3)有几个邮件模板环境变量图片中显示不全,下面是完整的。
MAIL_SUBJECT
1 | ${PARENT_NICK},您在『${SITE_NAME}』上的评论收到了回复 |
MAIL_TEMPLATE
1 | <div style="border-radius: 10px 10px 10px 10px;font-size:13px;color: #555555;width: 666px;font-family:'Century Gothic','Trebuchet MS','Hiragino Sans GB',微软雅黑,'Microsoft Yahei',Tahoma,Helvetica,Arial,'SimSun',sans-serif;margin:50px auto;border:1px solid #eee;max-width:100%;background: #ffffff repeating-linear-gradient(-45deg,#fff,#fff 1.125rem,transparent 1.125rem,transparent 2.25rem);box-shadow: 0 1px 5px rgba(0, 0, 0, 0.15);"><div style="width:100%;background:#49BDAD;color:#ffffff;border-radius: 10px 10px 0 0;background-image: -moz-linear-gradient(0deg, rgb(67, 198, 184), rgb(255, 209, 244));background-image: -webkit-linear-gradient(0deg, rgb(67, 198, 184), rgb(255, 209, 244));height: 66px;"><p style="font-size:15px;word-break:break-all;padding: 23px 32px;margin:0;background-color: hsla(0,0%,100%,.4);border-radius: 10px 10px 0 0;">您在<a style="text-decoration:none;color: #ffffff;" href="${SITE_URL}">『${SITE_NAME}』</a>上的留言有新回复啦!!!</p></div><div style="margin:40px auto;width:90%"><p>"<strong>${PARENT_NICK}</strong>" 同学,您曾发表评论:</p><div style="background: #fafafa repeating-linear-gradient(-45deg,#fff,#fff 1.125rem,transparent 1.125rem,transparent 2.25rem);box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15);margin:20px 0px;padding:15px;border-radius:5px;font-size:14px;color:#555555;">${PARENT_COMMENT}</div><p>"<strong>${NICK}</strong>" 给您的回复如下:</p><div style="background: #fafafa repeating-linear-gradient(-45deg,#fff,#fff 1.125rem,transparent 1.125rem,transparent 2.25rem);box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15);margin:20px 0px;padding:15px;border-radius:5px;font-size:14px;color:#555555;">${COMMENT}</div><p>您可以点击:<a style="text-decoration:none; color:#12addb" href="${POST_URL}">[回复的完整内容] </a>进行查看。欢迎再次光临<a style="text-decoration:none; color:#12addb" href="${SITE_URL}"> 『${SITE_NAME}』</a>!!!</p><style type="text/css">a:link{text-decoration:none}a:visited{text-decoration:none}a:hover{text-decoration:none}a:active{text-decoration:none}</style></div></div> |
MAIL_SUBJECT_ADMIN
1 | 叮咚!『${SITE_NAME}』上有了新评论! |
MAIL_TEMPLATE_ADMIN
1 | <div style="border-radius: 10px 10px 10px 10px;font-size:13px; color: #555555;width: 666px;font-family:'Century Gothic','Trebuchet MS','Hiragino Sans GB',微软雅黑,'Microsoft Yahei',Tahoma,Helvetica,Arial,'SimSun',sans-serif;margin:50px auto;border:1px solid #eee;max-width:100%;background: #ffffff repeating-linear-gradient(-45deg,#fff,#fff 1.125rem,transparent 1.125rem,transparent 2.25rem);box-shadow: 0 1px 5px rgba(0, 0, 0, 0.15);"><div style="width:100%;background:#49BDAD;color:#ffffff;border-radius: 10px 10px 0 0;background-image: -moz-linear-gradient(0deg, rgb(67, 198, 184), rgb(255, 209, 244));background-image: -webkit-linear-gradient(0deg, rgb(67, 198, 184), rgb(255, 209, 244));height: 66px;"><p style="font-size:15px;word-break:break-all;padding: 23px 32px;margin:0;background-color: hsla(0,0%,100%,.4);border-radius: 10px 10px 0 0;">您的<a style="text-decoration:none;color: #ffffff;" href="${SITE_URL}"> 『${SITE_NAME}』 </a>上有了新的评论 </p></div><div style="margin:40px auto;width:90%"><p><strong>"${NICK}"</strong> 发表评论:</p><div style="background: #fafafa repeating-linear-gradient(-45deg,#fff,#fff 1.125rem,transparent 1.125rem,transparent 2.25rem);box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15);margin:20px 0px;padding:15px;border-radius:5px;font-size:14px;color:#555555;">${COMMENT}</div><p><a style="text-decoration:none; color:#12addb" href="${POST_URL}" target="_blank">[查看详情]</a></p><style type="text/css">a:link{text-decoration:none}a:visited{text-decoration:none}a:hover{text-decoration:none}a:active{text-decoration:none}</style></div></div> |
如果使用国际版leancloud,那么leancloud的定时任务要做一些调整。主要就是将官方的介绍时间调整成北京时区的时间。
1 | 北京时间每天早8点检查过去24小时内漏发的通知邮件一并补发 |
1 | 每天早0点到晚23点每隔30分钟访问云引擎 |
¶4. 整合多个评论面板
编辑 /themes/next/layout/_third-party/comments/valine.swig
,修改如下:
1 | new Valine({ |
编辑 themes/next/layout/_partials/comments.swig
,修改如下:
1 | {% elseif theme.gitment.enable %} |
创建 themes/next/source/css/_custom/comments.styl
文件,内容如下:
1 | /** |
✉️ 由于整合vssue的过程中发现单独使用没问题,但是和其他评论面板在一起发生回调地址不正确的问题,于是这里暂且只整合了Gitalk和Valine,如果有小伙伴找到了解决方案,欢迎联系本人,鲜花奉上!🌹
¶二十四、 github和coding双线路部署hexo
¶1. 配置
这里讲的是hexo一次部署能够实现github和coding两个远程仓库自动同步,你只要打开全局配置文件 myblog/_config.yml
,搜索关键字 deploy
,根据自己远程仓库地址做以下修改:
1 | deploy: |
¶2. 部署
和原来的单部署执行的命令一样:
1 | hexo g |
🙆♂ 双线路部署hexo完成。
¶3. 额外补充
其实完成以上步骤就能实现简单版的双线路部署hexo了,但有两个问题:
(1)不同平台上的hexo博客需要不同的域名访问
(2)双线部署的的情况下,gittalk由于是通过域名来调用github OAuth Apps的api的,但是github和coding免费提供的是两个不同的域名,所以会导致api调用错乱而报错的问题。
我们希望用同一个域名就能同时访问github pages和coding pages,即所谓的负载均衡思想,而且还要解决gitalk api调用错乱的问题。
解决以上问题的前提是有一个自己的域名。至于怎么获取域名,我就不废话了 啊,百度吧朋友 😅 ~!这里就假设你已经有了自己的域名,然后按照下面的步骤一步一步完成即可。
¶3.1 解析域名CNAME记录
这里以qcmoke.site域名为例,将域名CNAME记录分别解析到你yourname.github.io和yourname.coding.me上。如下图:
如果你的dns解析托管服务商解析线路有“国内”线路,最好将 yourname.coding.me
解析到国内线路。而 yourname.github.io
解析到国外线路即可。如果没有的话,和我一样全选默认线路即可。
¶2.2 设置自定义域名
分别登录到github和coding后台,将你的域名填入并启用https即可。
(1)Github
💁♂提示:
github目前启用自定义域名的https服务大概需要等24小时才能生效。如果到时间了还未生效,并且"Enforce HTTPS"是灰色的不能选择或者没有这个选项,你可以清除设置中的custom domain 域名,再次填写保存即可解决,然后"Enforce HTTPS"选择打钩,一般就能启用https了。
💡 可选:你可以选择在仓库根目录中加入一个名为
CNAME
的文件,里面填入你的域名,如www.qcmoke.site
,这和设置中填入自定义域名的效果是一样的)
(2)Coding
💁♂ 说明:
coding需要银牌以上会员才有权限加入自定义的域名。不过银牌会员是免费的,登录coding后找到会员设置后点击申请并完善个人信息后就能升级到银牌会员。
🙉 目前coding被腾讯大哥收购后,界面改了很多,请自行解决。
🌸 完成后你只要通过自定义的域名访问你的git page服务即可。
¶3.4 额外补充
💁♂如果你没有使用gitalk,可以直接跳过下面的内容。
上文中“加入评论面板”已经介绍如何创建“github OAuth Apps”,这里额外补充说明一下,和无自定义域名的情况不同 ,有自定义域名的情况只需要一个github OAuth Apps ,所以Homepage URL和Authorization callback URL都指向同一个地址路径,所以不同仓库下的gitalk实际调用的是同一个github OAuth Apps的api 。如果你之前已经为github博客和coding博客分别创建了两个github OAuth Apps,那么我建议你可以删除掉那些无用的github OAuth Apps了。然后重新创建一个github OAuth Apps,
注意:github OAuth Apps 上的Homepage URL和Authorization callback URL为你博客的新地址(自定义域名地址),如:https://www.qcmoke.site
修改 myblog/themes/next/_config.yml
主题配置文件中的gitalk配置,配置完成如下图:
¶4. 关于coding广告
目前使用自定义域名,coding会强制在你打开博客时放入几秒钟的广告,在此吐槽一下💢。去除这个广告页面也不是没有办法,coding提供了一些办法,其中一种就是在你的博客首页加入他们家的链接。也就是“Hosted by Coding Pages”这几个字,虽然还是很讨厌,但是没办法,忍忍吧,毕竟要了人家的服务器啦。既然coding要求帮他们打广告,而我又用的是双线部署hexo博客到github和coding上的方案,故将计就计,那也顺便帮github打广告啦。具体做法如下:
在 myblog/themes/next/layout/_partials/footer.swig
中找到如下代码块:
1 | {% if theme.post_wordcount.totalcount %} |
另起一行,添加如下代码:
1 | <!-- Github Pages and coding pages ad --> |
以上完成后还没结束,还要登录到coding后台设置选择“已放置 Hosted by Coding Pages”打钩。但你可能找不到这个设置页面,你需要切换coding主页回旧版再找pages服务设置,就能找到这个设置了,如下:
Hosted by Coding Pages 提交后需要审核,会在两个工作日内为你处理。处理成功后就不会有打开博客主页前的几秒钟广告推送了。
¶二十五、添加页面加载效果
打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 pace_theme
找到如下代码位置,将 pace
设置为 true
,pace_theme
可以根据列出了的样式进行选择:
1 | # Progress bar in the top during page loading. |
¶二十六、hexo博客静态资源压缩优化
用hexo生成静态文件时,默认生成的静态文件存在大量空白,而且css、js都未经压缩,这在一定程度上会影响页面的加载,所以在网上所搜有没有办法来优化这些问题?
答案肯定是有,当然大部分博客都提到了使用gulp来精简代码,而我今天所要跟大家介绍的是hexo-neat插件 。我为啥不选择gulp而使用hexo-neat呢?因为用gulp需要在每次生成静态文件后,即 hexo g
后,都要另外执行 gulp
命令才能压缩静态文件;而使用hexo-neat则无须另外执行其他命令即可自动完成压缩功能,即方便了使用习惯。
在站点的根目录下执行以下命令:
1 | npm install hexo-neat --save |
打开 myblog/_config.yml
全局配置文件添加如下配置:
1 | #静态资源压缩优化 |
做好以上几步之后,重新生成博客的时候就会自动压缩所有的html、css、js。访问博客时能感到明显加快了。
¶二十七、置顶按钮显示百分比
打开 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 scrollpercent
。 将其值设置为true。效果如下图:
¶二十八、自定义摘要图片和摘要描述
文章封面的意思就是:在博客首页的时候会显示文章的封面图片和摘要描述,进入这篇文章的详细页面后,将不显示这张图片和摘要描述。
如果想添加文章封面的话,需要添加字段属性:summary_img
,summary_img
的值是图片的路径。
如果想要添加摘要描述的话,可以添加字段属性:summary_description
,summary_description
的值是描述的内容。
例如:
1 | --- |
具体实现细节如下:
修改 myblog/themes/next/layout/_macro/post.swig
文件。
将代码:
1 | <!-- 自定义摘要图片开始 --> |
添加到以下所示的位置
1 | {% if is_index %} |
这样的话,就可以使用 summary_img: imageurl
和 summary_description: description demo
来设置文章封面和摘要描述了。
💡建议:
开启了文章封面和摘要描述的文章,我建议将
<!-- more -->
放在文章正文内容的开头。为了适应不同大小的图片,摘要图片的样式需要做一下调整。在
myblog/themes/next/source/css/_custom/custom.styl
中添加以下样式代码:
1 | //缩略图指定宽度值显示。 |
如果希望hexo默认description也和summary_description居中显示,同样修改 myblog/themes/next/layout/_macro/post.swig
文件。找到以下代码。
1 | {% if post.description and theme.excerpt_description %} |
将以上代码改成:
1 | {% if post.description and theme.excerpt_description %} |
¶二十九、添加在线联系功能
在这使用的是DaoVoice做在线联系功能。
首先到DaoVoice上注册一个账号,注册完成后会得到一个app_id,获取appid的步骤如下图所示:
打开myblog/themes/next/layout/_partials/head.swig文件找到如下代码:
1 | {% include 'head/custom-head.swig' %} |
另起一行添加如下代码(实际我就是添加到最后):
1 | {% if theme.daovoice %} |
打开 myblog/themes/next/_config.yml
主题配置文件
1 | # Online contact |
最后执行 hexo clean && hexo g && hexo s
,打开博客就能看到效果了。如下图:
当然为了调整图标的位置,你可以登陆daovoice后台进行修改,如下图:
最后到右上角选择管理员,微信绑定,可以绑定你的微信号,关注公众号后打开小程序,在微信中登陆daovoice,就可以实时收发消息,有新的消息也会通过微信的小程序通知,设置页面如下:
¶三十、优化深色代码高亮背景
在主题配置文件修改代码高亮背景为深色背景后,当在博客文章上选择代码时,选择到的颜色也为深色,虽然和背景色还是有点点区别,但是不好区分。所以经过一番研究,才有了以下优化教程。
在 myblog/themes/next/source/css/_custom/custom.styl
中添加以下样式代码:
1 | //page code background-color |
以上代码优化了所以高亮代码区域,包括gitalk评论区的高亮代码。 这些样式代码是通过浏览器调试而得,如有其它样式的需求,可参考本示例在浏览器中调试。
¶三十一、修改文章底部带#号的标签
打开 myblog/themes/next/layout/_macro/post.swig
文件,搜索 rel="tag">#
,将 #
换成 <i class="fa fa-tag">
,如下:
1 | <div class="post-tags"> |
¶三十二、文章末尾添加“本文结束”标记
在路径 myblog/themes/next/layout/_macro
中新建 passage-end-tag.swig
文件,并复制以下代码到 passage-end-tag.swig
中:
1 | <div> |
打开myblog/themes/next/layout/_macro/下的post.swig文件,找到如下代码块:
1 | {#####################} |
在以上代码块的上面另起一行添加如下代码:
1 | <div> |
然后打开主题配置文件myblog/themes/next/_config.yml,在末尾添加:
1 | # 文章末尾添加“本文结束”标记 |
¶三十三、修改文章内链接文本样式
在 myblog/themes/next/source/css/_custom/custom.styl
中添加以下样式代码:
1 | //文章内链接文本样式 |
可以根据自己的喜好使用浏览器调试得到相应的样式。
¶三十四、添加404页面
每个站长都应该有一份社会责任心,力所能及的时候可以让你的404页面加入腾讯404公益平台:https://www.qq.com/404/ 。早期的腾讯404JS。有2个问题,不支持https,homepage定制能力不稳定;比较令人诟病,如今的腾讯404已经支持https。可以直接使用。
在 myblog/myblog/source
目录下新建名称为 404.html
的文件,编辑此文件,根据复制粘贴以下代码并根据自己的情况做必要修改。具体修改细节,在以下代码有说明。
1 | --- |
部署服务器后,访问不存在的资源时即可打开公益404页面。
注意:不能通过本地localhost访问,要部署后通过自己域名来访问。
¶三十五、Gemini布局返回顶部按钮适配移动端
由于自己不才,为了解决这个问题,不知花了多少时间和精力。在这个折腾的过程中,有上过百度和谷歌搜了好多的教程但却无功而返;后来又尝试通过浏览器调试来解决这个问题,也同样以失败而告终。在几近绝望时,网友分享了一篇博客文章《在移动设备下启用NexT主题的目录页面和回到顶部按钮》,经参考并做修改后才有了以下简陋的教程。
- 教程开始:
编辑 themes/next/source/css/_common/components
目录下的 back-to-top.styl
和 back-to-top-sidebar.styl
文件。用 /* */
注释掉以下代码。(注意:两个文件都要注释掉)
1 | +tablet() { |
注释后如下:
1 | /* |
¶三十六、去除侧栏目录自动生成的序数
编辑 myblog/themes/next/_config.yml
主题配置文件,搜索关键字 toc
找到如下代码,number
默认是 true
,将 number
设置为 false
,如下:
1 | toc: |
¶三十七、添加最近文章栏目
编辑 myblog/themes/next/layout/_macro/sidebar.swig
。找到 theme.social
板块代码,在该板块最后的 endif
后隔一行添加如下代码。
1 | {# recent posts #} |
再编辑 myblog/themes/next/source/css/_common/components/sidebar/sidebar-blogroll.styl
在文件最后添加如下样式代码
1 | li.recent_posts_li { |
编辑主题配置文件 myblog/themes/next/_config.yml
,添加如下代码:
1 | recent_posts_title: 近期文章 |
¶三十八、魔改Muset布局
由于个人喜好,和为适配移动端,本博客从这里开始将修改next布局为Muse。并在Muse的基础上做了比较大的样式调整,形成了目前博客现状的基本布局和样式。其中包括整体骨架布局、菜单栏、首页文章缩略卡片、文章页宽、移动端适配、字体大小等等众多样式的调整。
修改 themes/next/_config.yml
启用 Muset
:
1 | # Schemes |
然后编辑 themes/next/source/css/_custom/custom.styl
添加自定义样式:
需要特别注意:这里的custom.styl样式内容是修改后的第一版,一切的博客样式更新都不会在这里另做修改。如果想参考最新版,可以移步到本文倒数第二大点,查看最新版本的custom.styl,不过我推荐你一步步来!
1 | //page code background-color |
经过上面一番折腾后最终得到如下博客主题布局效果。
¶三十九、插入音乐和视频
¶1. html原生方式
¶1.1 音乐面板
在markdown文章里使用 HTML 的标签引入,写法如下
1 | <audio src="https://什么什么什么.mp3" style="max-height :100%; max-width: 100%; display: block; margin-left: auto; margin-right: auto;" controls="controls" loop="loop" preload="meta">Your browser does not support the audio tag.</audio> |
¶1.2 视频面板
在markdown文章里使用 HTML 的标签引入,写法如下
1 | <video poster="https://封面图.jpg" src="https://什么什么什么.mp4" style="max-height :100%; max-width: 100%; display: block; margin-left: auto; margin-right: auto;" controls="controls" loop="loop" preload="meta">Your browser does not support the video tag.</video> |
¶2. 第三方插件方式
¶2.1 音乐面板插件
此前有尝试过使用网易云音乐外链的方式给博客加入音乐面板,但使用的过程中发现有一些音乐因为版权原因播放不了,还有就是不完全支持 https,导致小绿锁不见了。要解决这些缺点,就需要另辟蹊径转而安装第三方音乐面板插件了,hexo-tag-aplayer是一个音乐面板插件,功能很强大,相比于原生html的视频面板而言,可玩性更丰富,比如可以有歌词,歌单列表等等。废话不多说,直接上教程。
安装音乐面板插件
1 | npm install hexo-tag-aplayer --save |
单首歌曲的形式
通过模板语法在markdown文章里引入,写法如下:
1 | {% aplayer "歌曲名" "歌手名" "https://什么什么什么.mp3" "https://封面图.jpg" "lrc:https://歌词.lrc" %} |
歌单的形式
1 | {% aplayerlist %} |
详细参数见 README 和这插件的“母亲” Aplayer 的官方文档。
关于 lrc 歌词,可以参考知乎的这篇文章https://www.zhihu.com/question/27638171下载网易云音乐的歌词,如果那歌词有错误(比如字母大小写和标点符号乱加)或者时间完全对不上,你可以一句一句自己查看修改……
¶2.2 视频面板
hexo-tag-dplayer插件功能相比于原生html视频标签会更加强大,比如可以使用弹幕,非常建议食用。
安装插件
1 | npm install hexo-tag-dplayer --save |
通过模板语法在markdown文章里引入,写法如下:
1 | {% dplayer "url=https://什么什么什么.mp4" "pic=https://封面图.jpg" "api=https://api.prprpr.me/dplayer/" "id=" "loop=false" %} |
如果要使用弹幕,必须有
api
和id
两项,并且若使用的是官方的 api 地址(即上面的),id 的值不能与这个列表的值一样。id 的值自己随便取,但建议使用视频的哈希值,可参考http://tool.oschina.net/encrypt?type=2。目前发现官方api不能使用,可以寻求其他免费的弹幕服务器。也可自行搭建,可参考:
¶3. 音乐面板综合案例
新建一个hexo markdown文章文件
1 | hexo n music |
在新建的music.md文件里加入如下内容:
1 | --- |
效果
¶4. 视频面板综合案例
新建一个hexo markdown文章文件
1 | hexo n video |
在新建的video.md文件里加入如下内容:
1 | --- |
效果:
¶四十、更改上下篇的顺序
默认next文章下面的"上一篇,下一篇"是旧发布的文章在上篇里的,但是如果希望新的发布文章在上篇的话就要做修改或者配置了,最新版本的next似乎已经可以直接在主题配置文件里设置了,但我这里使用的是旧版本的next5.1.4,所以需要深入源码进行修改,可以参考下面的方案。
编辑 blog/themes/next/layout/_macro/post.swig
然后做以下修改:
找到以下代码块。
1 | {% if not is_index and (post.prev or post.next) %} |
将以上代码修改成以下代码:
1 | {% if not is_index and (post.prev or post.next) %} |
¶四十一、添加看板娘
目的是给博客页面添加小萌宠,给博客添加一点趣味性,下面就介绍使用live2d插件来实现这个功能。
(1)下载并安装插件
1 | $ npm install --save hexo-helper-live2d |
(2)下载并安装萌宠模型
1 | $ npm install 模型名称 |
官方提供了以下模型名称:
live2d-widget-model-chitose
live2d-widget-model-epsilon2_1
live2d-widget-model-gf
live2d-widget-model-haru/01
(usenpm install --save live2d-widget-model-haru
)live2d-widget-model-haru/02
(usenpm install --save live2d-widget-model-haru
)live2d-widget-model-haruto
live2d-widget-model-hibiki
live2d-widget-model-hijiki
live2d-widget-model-izumi
live2d-widget-model-koharu
live2d-widget-model-miku
live2d-widget-model-ni-j
live2d-widget-model-nico
live2d-widget-model-nietzsche
live2d-widget-model-nipsilon
live2d-widget-model-nito
live2d-widget-model-shizuku
live2d-widget-model-tororo
live2d-widget-model-tsumiki
live2d-widget-model-unitychan
live2d-widget-model-wanko
live2d-widget-model-z16
你可以查看demo演示后再决定做选择。
(3)编辑Hexo主配置文件 myblog/_config.yml
,添加如下配置:
1 | ## Live2D |
¶四十二、图片懒加载
懒加载,即在需要的时候才加载图片,而不是一次性加载完整个页面的图片,使用lazyload插件实现懒加载可以有效提高博客的访问速度。
在Hexo博客目录下,执行以下命令:
1 | npm install hexo-lazyload-image --save |
编辑Hexo主配置文件 myblog/_config.yml
,添加如下配置:
1 | lazyload: |
参数:
enable:是否开启图片做懒加载功能
onlypost:是否仅文章中的图片做懒加载,如果为 false,则主题中的其他图片,也会做懒加载,如头像,logo 等任何图片。
loadingImg:图片未加载时的代替图,不填写使用默认加载图片,如果需要自定义,添填入 loading 图片地址,如果是本地图片,不要忘记把图片添加到你的主题目录下。 Next 主题需将图片放到
themes/next/source/images
目录下,然后引用时:loadingImg: ../images/xxx.gif
¶四十三、指定文章禁用侧栏目录
对于Muse布局,如果页面含有多级标题,那么默认是会自动展开侧栏抽屉目录的,但实际的使用中,我们不希望比如关于页面,友情页面等等自动展开目录,那么就需要对next做一定的修改来实现这个需求。
找到了 themes/next/layout/_marcro/sidebar.swig
中找到下一列信息。
1 | {% set display_toc = is_post and theme.toc.enable or is_page and theme.toc.enable %} |
将其修改为:
1 | {% set display_toc = is_post and theme.toc.enable and !page.no_toc or is_page and theme.toc.enable and !page.no_toc %} |
如果需要指定某篇文章禁用侧栏目录,只需要在该文章Front-Matter部分添加一个 no_toc: true
即可。
如下:
1 | --- |
¶四十四、优化图片点击放大功能
默认fancybox开启后,所有文字的图片都会强制被加入到了fancybox弹出框,并且fancybox会和图片链接冲突,如果想让某些图片禁用fancybox的话可以对next做一些修改来实现这个小功能。
修改 themes/next/source/js/src/utils.js
文件:
1 | wrapImageWithFancyBox: function () { |
然后在使用的时候,给不需要 fancybox 的标签中添加class属性 class="nofancybox"
,如果 class 属性中已经有其它内容,也可以以空格并列,比如下面:
1 | <img class="logoimg nofancybox" src="https://www.qcmoke.site/images/logo.jpg"> |
¶四十五、添加代码块全选复制功能
下载第三方插件:clipboard.js, 或者直接下载 (右键另存为)。保存 clipboard.min.js
文件到 theme/next/source/js/src
下。然后在 theme/next/source/js/src
目录下,创建 clipboard-use.js
,添加内容如下:
1 | /*页面载入完成后,创建复制按钮*/ |
在 theme/next/source/css/_custom/custom.styl
样式中添加如下代码:
1 | //代码块复制按钮 |
在 themes/next/layout/_layout.swig
文件中引用(</body>
)之前添加:
1 | <!-- 添加代码块全选复制功能 --> |
¶四十六、添加mac代码面板
创建 themes/next/scripts/codeblock.js
文件
1 | var attributes = [ |
创建 themes/next/source/css/_custom/macPanel.styl
文件
1 | // mac Panel效果代码块相关 |
修改 themes/next/source/css/_custom/custom.styl
,在最后追加如下:
1 | @require "macPanel" |
¶四十七、mac代码面板整合全选复制按钮
为了实现这个整合,我可真是花了不少时间,问了很多其他博主,但都无果,后来发现最新版的next其实已经实现了这个整合的功能,但是很遗憾的是我博客的next还是比较旧的版本,没办法直接配置实现。索性我直接去下载了最新版的next进行研究,通过一番较劲后,我终于做出来了,下面奉上教程:
¶1. 调整说明
如果是按照上文步骤一步一步实现下来的,那么为了实现整合,还得做以下调整。如果没有经过以上步骤,可以直接跳到第2点。
由于mac面板直接整合了代码全选复制按钮,所以可以把下面这些文件删除掉
themes/next/source/js/src/clipboard-use.js
themes/next/source/css/_custom/macPanel.styl
themes/next/scripts/codeblock.js
此外还要做一些修改,删除掉以下文件的相关代码:
文件1:themes/next/layout/_layout.swig
1 | <!-- 添加代码块全选复制功能 --> |
文件2:themes/next/source/css/_custom/custom.styl
1 | //代码块复制按钮 |
1 | @require "macPanel" |
¶2. 整合步骤
新增整合的js逻辑代码:themes/next/source/js/src/highlight-wrap.js
1 | /** |
修改页面模板引擎文件:themes/next/layout/_scripts/pages/post-details.swig
,在最后追加如下代码以引入第三方插件依赖 clipboard.min.js
和以上的 highlight-wrap.js
。
1 | <!-- 代码块包裹面板=mac面板+代码块全选复制按钮 --> |
第三方插件:clipboard.js, 或者直接下载 (右键另存为)。如果之前没有下载clipboard.min.js,那么需要下载并保存
clipboard.min.js
文件到theme/next/source/js/src
下
新增整合的自定义样式文件:themes/next/source/css/_custom/highlight-wrap.styl
1 | /** |
修改主题自定义样式文件:themes/next/source/css/_custom/custom.styl
,在最后追加如下代码以引入整合的样式:
1 | @require "highlight-wrap" |
💁♂温馨提示:
custom.styl中最好不要出现其他与高亮有关的样式,如果存在的话可能会与上面的样式冲突。如果发现最终效果不理想,可以尝试在custom.styl中注释掉冲突的css代码。
建议修改hexo next主题配置文件,设置代码高亮
highlight_theme
为night eighties
,这样效果会更好。
效果:
¶四十八、美化标签云
新建 themes/next/layout/tag-color.swig
文件,拷贝如下内容:
1 | {########彩色标签云##########} |
在 themes/next/layout/page.swig
里引入 tag-color.swig
。
1 | {# tagcloud page support #} |
¶四十九、自定义友情链接页面
¶方案1 纯静态文件
创建 myblog/source/links-falls/index.md
1 | --- |
在 myblog/source/static/
目录分别创建文件
linklist.json
1 | [ |
添加友链的话,只要在这个json文件里添加数据即可。
link.js
1 | $(function() { |
link.css
1 | .links-content { |
需要在 myblog/_config.yml
中添加如下配置,表示不进行渲染的目录或者文件
1 | skip_render: |
最后修改主题配置文件 themes/next/_config.xml
文件,把链接加入到菜单栏
1 | menu: |
效果:
¶方案2 模板引擎swig
新建 themes/next/layout/links.swig
文件,并复制粘贴以下内容
1 | {% block content %} |
然后修改 themems/next/layout/page.swig
文件,根据上下文找到相关位置然后添加如下两处 +
号相关的内容。
1 | {% block title %}{# |
1 | {% elif page.type === 'categories' %} |
新建 hexo/source/links/index.md
友链文件,在标题头中写入 type = "links"
这个属性头,如下:
1 | --- |
修改主题配置文件 themes/next/_config.xml
文件,把链接加入到菜单栏
1 | menu: |
最后,添加友链的话,只要在主题配置文件 themes/next/_config.xml
文件末尾添加相关友情信息即可:
1 | # 友情链接 |
效果:
¶五十、添加热门文章页面
💁♂说明:
这里添加热门文章页面的原理是通过leancloud访问统计生成的数据实现的,故需要编辑
themes/next/_config.yml
主题配置文件开启leancloud_visitors
的功能。具体操作请参考上文的“leancloud统计”。
创建 themes/next/layout/top.swig
文件
1 | {% block content %} |
💁♂ 提醒:
如果你的博客使用了 Valine 评论系统,那么可能会有代码冲突问题。需要修改
themes/next/layout/_third-party/comments/valine.swig
加入{% if page.comments %}
这个判断条件,默认旧版的next没有这个条件。可参考上文“增强版valine”相关代码。
编辑 themes/next/layout/page.swig
,修改两处代码
1 | {% block title %}{# |
1 | {% elif page.type === 'categories' %} |
创建 myblog/source/top/index.md
文件
1 | --- |
然后编辑 themes/next/_config.yml
,添加菜单项
1 | menu: |
¶五十一、文章底部加上评分小星星
淘宝买东西,作为消费者的我们,看评价很重要。现在作为博主,写了一篇文章,很期待读者的反馈。而与淘宝一样,确认收货后,相比评论,更愿意五星好评。那么博客文章怎么加上呢?首先打开主题配置文件:
1 | # Star rating support to each article. |
先去https://widgetpack.com注册个帐号,填一下自己博客的信息,把左上角的 ID值,填进上面的 rating.id
中,color
改成自己喜欢的即可。
💁♂说明:
- 可以配置评分方式,侧栏 > Rating > Setting,建议用 IP address 或 Device(cookie),免登录,毕竟 Socials 里面的选项几乎都被墙,不适合国内网络环境。
- 建议在侧栏 > Site > Setting 中勾选 Private 选项。
- 上面两步勾选后别忘了点击页面右下方的 SAVE SETTING 绿色按钮保存。
如果你想给评分的星星周围加内容,可以修改文件:themes/next/layout/_macro/post.swig
,例如添加下面 +
相关的内容:
1 | {% if theme.rating.enable %} |
¶五十二、优化首页摘要
为了减小首页摘要文字的大小,使得能够更美观,可通过下面步骤修改:
编辑 themes/next/layout/_macro/post.swig
。加入如下div。
1 | {% if is_index %} |
然后编辑 themes/next/source/css/_custom/custom.styl
并加入如下样式:
1 | // 摘要文字 |
¶五十三、暗黑模式
编辑 themes/next/layout/_scripts/vendors.swig
文件,在最文件底部加入如下代码
1 | <!-- 暗黑模式 --> |
创建 themes/next/source/css/_custom/dark.styl
,内容如下:
1 | /* 黑暗切换模式按钮 */ |
编辑 themes/next/source/css/_custom/custom.styl
,在此文件中的最后引入 dark.styl
样式文件
1 | @require 'dark'; |
¶五十四、最新版custom.styl
该 custom.styl
版本是随着博客的更新而一直在维护的最新版本。不确保适配其他博客的hexo next Muset布局,如果想要第一版 custom.styl
,可以移步到本文“魔改Muset布局”。
themes/next/source/css/_custom/custom.styl
1 | // 去掉链接下的下划线 |
💁♂下面的文件是 custom.styl
依赖的样式文件:
(1)themes/next/source/css/_custom/scrollbar.styl
1 | /** |
(2)themes/next/source/css/_custom/comments.styl
➡️⏫ 参考上文“整合多个评论面板”的 comments.styl
(3)themes/next/source/css/_custom/highlight-wrap.styl
➡️⏫ 参考上文“mac代码面板整合全选复制按钮”的 highlight-wrap.styl
(4)themes/next/source/css/_custom/dark.styl
➡️⏫ 参考上文“暗黑模式”的 dark.styl
¶五十五、添加备案号
修改 themes/next/layout/_layout.swig
,在footer标签里添加a链接标签,如下:
1 | <footer id="footer" class="footer"> |
然后修改主题配置文件 themes/next/_config.yml
l添加如下配置:
1 | beian: |
¶五十六、推荐文章
📚https://easyhexo.com
📚https://io-oi.me/tech/hexo-next-optimization
📚https://www.liaofuzhan.com/posts/2114475547.html