CSDN仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。
本博文对应地址: https://hceng.cn/2017/03/06/GitHub+Hexo搭建及优化/
本文主要是记录本博客的搭建和优化。
为什么做独立博客?
我想大概就是激励自己去持续学习和思考。
首先说下本博客搭建的大致流程:
1.有一个GitHub账号,同时配置GitHub Pages;
2.安装、配置Hexo;
3.配置博客、Markdown写文章;
4.绑定自己域名(可选);
5.优化日常操作(可选);
1.Github Pages
Github Pages是GitHub提供的免费静态站点;
创建Github Pages后,在里面存放网页源码,然后在对应网址就可看到对应网页效果;
使用GitHub账号创建一个仓库,但是这个仓库是有规则的,其格式必须为:yourusername.github.io;
注:
- yourusername必须是自己的GitHub账号名;
- 类型只能选Public;
2.安装、配置Hexo
Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。
1、安装 Node.js;
2、下载Cmder代替Windows自带cmd;
3、安装 Git;
4、添加本机密钥到GitHub;
5、安装完成后,在开始菜单里找到“Git”->“Git Bash”,在Git上设置username和email;
其中3-5步在前一篇博文Git日常使用小结中已设置过了,无需再设置。
6、安装 Hexo:使用 npm 安装 Hexo。
{% codeblock lang:shell%}
$ npm install -g hexo-cli
{% endcodeblock %}
至此,已经安装完Hexo,后续进行相关配置。
7、在电脑上选一个盘,建个文件夹存放博客数据,例我的:E:\blog;然后打开cmder,输入:
{% codeblock lang:shell%}
$ e: & cd blog #进入所建文件夹
$ hexo init blog #初始化blog
{% endcodeblock %}
成功初始化blog后将出现:
{% codeblock lang:shell%}
INFO Start blogging with Hexo!
{% endcodeblock %}
8、最后再生成静态网页,即可看到网页模板:
{% codeblock lang:shell%}
$ hexo generate # 启动本地服务器
$ hexo server # 在浏览器输入 http://localhost:4000/就可以看见网页和模板了
{% endcodeblock %}
完成后,将会看到如下提示:
{% codeblock lang:shell%}
INFO Start processing
INFO Hexo is running at http://localhost:4000/. Press Ctrl+C to stop.
{% endcodeblock %}
此时,打开浏览器,输入http://localhost:4000/就可以看见默认的网页和模板了。
3.配置博客、发表文章
在blog目录下,用Sublime Text(使用它的原因是默认是UTF-8编码,中文不会乱码)打开**_config.yml**文件,修改参数信息;
注:
在每个参数的":"后都要加一个空格修改网站相关信息;
3.1修改网站相关信息:
{% codeblock lang:css%}
Site
title: hceng blog
subtitle: Linux/Android驱动
description: 生命不息、折腾不止
author: hceng
language: zh-CN
timezone: Asia/Shenzhen
{% endcodeblock %}
3.2修改配置部署相关信息:
{% codeblock lang:css%}
Deployment
Docs: https://hexo.io/docs/deployment.html
deploy:
- type: git
repo: ‘[email protected]:hceng/hceng.github.io.git’
branch: master - type: git
repo: ‘[email protected]:hceng/hceng.git’
branch: coding-pages
{% endcodeblock %}
这里由于我同时提交到了GitHub和Coding,用于测试百度收录,所以有两个,写一个也没事。
注:如果在执行 hexo deploy 后,出现 error deployer not found:github(git) 的错误,执行:
{% codeblock lang:shell%}
$ npm install hexo-deployer-git --save
{% endcodeblock %}
3.3修改主题:
为了让博客更加美观和符合自己需求,可以修改Hexo主题来满足自己需求。Hexo 安装主题的方式非常简单,只需要将主题文件放置于站点目录的 themes 目录下,然后修改下配置文件即可。
Hexo 有两份主要的配置文件(_config.yml),一份位于站点根目录下,另一份位于主题目录下。为了描述方便,在以下说明中,将前者称为 站点配置文件,后者称为 主题配置文件。
下载hexo-theme-yilia主题,解压放入themes文件夹下,如:E:\blog\blog\themes,根据自己需求修改主题配置文件,最后再修改站点配置文件里的theme:
{% codeblock lang:css%}
Extensions
Plugins: https://hexo.io/plugins/
Themes: https://hexo.io/themes/
theme: hexo-theme-yilia
{% endcodeblock %}
在主题配置文件里,修改头像、颜色、标签等,都有相应的注释写得非常清楚,按需修改。
3.4发表文章:
在Cmder中输入:
{% codeblock lang:css%}
$ hexo new “blog tags”
INFO Created: E:\blog\blog\source_posts\blog-tags.md
{% endcodeblock %}
根据提示得路径,即可找到新建得文件,该文件使用Markdown语法,下载MarkdownPad2进行编辑。
先修改相关的文章信息:
{% codeblock lang:css%}
title: blog tags
tags:
- 随笔
本文主要是总结blog预计的标签,并不定时更新。
{% endcodeblock %}
可修改标题、标签(本有日期的修改选项,但有日期就不能显示文章,怀疑是主题或者其它地方干扰了,文章日期就是文件创建日期)。
然后简单说下Markdown语法:
3.4.1标题和引用
- 行首插入 1 到 6 个 # ,对应到标题 1 到 6 级标题:
{% codeblock lang:Markdown%}
一级标题
二级标题
三标题
{% endcodeblock %}
效果:
见本文(影响目录效果,就不示例了)。
- 区块引用则使用 ‘>’ 角括号来表示:
{% codeblock lang:Markdown%}
这是引用
{% endcodeblock %}
效果:
这是引用
3.4.2列表和强调
-
列表分有序的1、2、3和无序的·:
{% codeblock lang:Markdown%} -
列表1
-
列表2
{% endcodeblock %}
效果: -
列表1
-
列表2
-
强调有加粗和斜体,用"*"来表示:
{% codeblock lang:Markdown%}
加粗
斜体
{% endcodeblock %}
效果:
加粗
斜体
3.4.3超链接和图片
在方括号"[]“写要显示标,在小括号”()"写链接:
{% codeblock lang:Markdown%}
hceng blog
{% endcodeblock %}
效果:
hceng blog
在文章如果需要加入图片,先需要把图片传到床图网站,生成链接后插入使用,格式如下:
{% codeblock lang:Markdown%}
{% endcodeblock %}
3.4.4加入代码
Markdown支持插入代码,使用单引号"`"来标注,注意是英文输入法下,左上角那个按键:
{% codeblock lang:Markdown%}
hello
{% endcodeblock %}
效果:
hello
这种方式感觉不够醒目,而且不支持语法高亮,所以我一般使用Codeblock,语法见网站,效果如下:
{% codeblock lang:c%}
#include <stdio.h>
int main(void)
{
printf(“hello,world!”);
return 0;
}
{% endcodeblock %}
4.绑定自己域名(可选)
完成以上步骤后,默认域名是GitHub提供的二级域名:yoursname.github.io,下面开始绑定自己的域名:
4.1购买域名
4.2绑定域名
- 保证上述工作完成,域名可用;
- 修改DNS,分别修改为:f1g1ns1.dnspod.net和f1g1ns2.dnspod.net
- 本地站点目录里的source目录下添加一个CNAME文件,里面写上网址;
注:
CNAME不要有任何后缀;
网址不要写www或http://,直接写hceng.cn这种;
- 注册DNSpod,然后添加域名,添加记录:
参考红线部分填写,一个主机纪录是@,记录类型是CNAME,线路类型填默认(图片中略有不同,是我测试百度抓取用的,暂时可不管),记录值写对应的GitHub Pages的地址;另一个主机纪录填www,其它和上面的一样。
- 最后把本地的Hexo生成一下,再提交到Github pages上;
5.优化日常操作(可选)
5.1 hexo命令简写
{% codeblock lang:shell%}
$ hexo n “新文章” == hexo new “新文章” #新建文章
$ hexo c == hexo clear #清理静态文件
$ hexo g == hexo generate #生成静态文件
$ hexo s == hexo server #启动本地预览
$ hexo d == hexo deploy #上传部署
{% endcodeblock %}
5.2 添加版权信息
1.在博客根目录下(和 source 同级),新建一个名为 scripts 的文件夹;
2.在 scripts 文件夹内, 新建一个 AddTail.js 脚本文件,脚本具体内容详见下文;
3.在博客根目录下,新建一个 tail.md 文件,里面写想要展示的版本说明内容;
AddTail.js 脚本文件:
{% codeblock lang:js%}
// Filename: AddTail.js
// Author: Colin
// Date: 2016/06/02
// Based on the script by KUANG Qi: http://kuangqi.me/tricks/append-a-copyright-info-after-every-post/
// Add a tail to every post from tail.md
// Great for adding copyright info
var fs = require(‘fs’);
hexo.extend.filter.register(‘before_post_render’, function(data){
if(data.copyright == false) return data;
// Add seperate line
data.content += '\n___\n';
// Try to read tail.md
try {
var file_content = fs.readFileSync('tail.md');
if(file_content && data.content.length > 50)
{
data.content += file_content;
}
} catch (err) {
if (err.code !== 'ENOENT') throw err;
// No process for ENOENT error
}
// 添加具体文章链接, 不需要去掉即可
//var permalink = '\n本文链接:' + data.permalink;
//data.content += permalink;
return data;
});
{% endcodeblock %}
tail.md 文件:
去Creative Commons根据自己需求,生成合适的许可,然后复制到tail.md 文件中;
参考博客:如何添加版权信息
5.3 自动添加目录(已舍弃)
20180105更新:舍弃本块功能;
原因:更新主题后,发现主题自带目录,且比原来的更好;
- 修改主题的ejs文件
打开文件:themes/你的主题/layout/_partial/article.ejs
在这个文件中找到<%- post.content %>
,并在这之前加入以下代码:
{% codeblock lang:js%}
<% if (!index && post.toc){ %>
文章目录
<%- toc(post.content, {list_number: false}) %>
<% } %>
{% endcodeblock %}
这里if语句中有两个条件,!index是为了不在首页的文章摘要中生成目录,post.toc确保了只在显式地标记了toc: true的文章中生成目录。若这两个条件满足,则创建一个目录的div。第五行表示不自动生成标号,不然加上自己的标号会有两个。 - 为需要的文章添加标记
5.4 添加访问人数统计(已更新)
20180105更新:舍弃本块功能;
原因:底部信息太多了,访问统计在实际使用中感觉并没用,故舍弃;
20190506更新:添加本块功能;
原因:不在最底部添加,而是在每篇博客下面添加,这样不会占用多余空间,另外作者更新了脚本;
- 安装脚本:
打开themes/你的主题/layout/_partial/footer.ejs
添加下面脚本:
{% codeblock lang:css%}
{% endcodeblock %}
-
在需要的位置添加添加显示:
需求是在每篇博客下面添加,于是在article.ejs
中间添加如下代码:
{% codeblock lang:css%}
<%- partial(‘post/tag’) %>
<%- partial(‘post/category’) %>
<% if (index && theme.show_all_link){ %>
<% } %>
<% } %><!-- 访问统计:添加开始位置 --> <% if ( !index ){ %> <div style="position: absolute; left: 50%;"> <div style="position: relative; left: -50%; color: #ccc;font-size:14px"> <span id="busuanzi_container_page_pv" style='display:none'> 本文总阅读量<span id="busuanzi_value_page_pv"></span>次 </span> <span style="font-size:15px; color:#ccc;">|</span> <span id="busuanzi_container_site_pv" style='display:none'> 本站总访问量<span id="busuanzi_value_site_pv"></span>次 </span> </div>
<% if (!index && theme.share_jia){ %> <%- partial('post/share') %> <% } %>
{% endcodeblock %}
参考链接:不蒜子
5.5 脚本自动化(已舍弃)
20180105更新:舍弃本块功能;
原因:使用自己写的HexoBlogClient客户端,实际体验更好,其原理还是用的如下脚本。
每次发布文章大致分为清理静态文件、生成静态文件、启动本地预览或上传部署,连续这么多命令何不合成一个,于是在windows下,可新建几个批处理脚本:
{% codeblock lang:shell [make1.bat] %}
#生成最新本地预览
hexo clean & hexo g &hexo s
{% endcodeblock %}
{% codeblock lang:shell [make2.bat] %}
#发布生成最新博客
hexo clean & hexo g & hexo d
{% endcodeblock %}
{% codeblock lang:shell [make3.bat] %}
#发成最新博客并上传源码到Coding私有库,以便在其它电脑上编辑
hexo clean & hexo g & hexo d & git add -A & git commit -m “from make3” &
git push origin master
{% endcodeblock %}
在Cmder中,输入对应的makeN,即可自动完成一系列命令。
5.6 提交搜索引擎(百度+谷歌+必应)
稳定测试已完成。
在百度/谷歌/必应搜索“hceng”或者博客内容关键字都会有相关结果。
直接在搜索引擎输入:
{% codeblock lang:c%}
site:hceng.cn
{% endcodeblock %}
即可检测收录文章数量。
这块内容也不复杂,主要参考的这篇博客,感兴趣的去摸索下。
5.7 添加评论模块(已舍弃)
20190504更新:舍弃本块功能;
原因:gitment其实蛮好用,但因为原作者弃坑,逐渐出现了一些问题,更改评论模块,详见后面;
国内目前由不少的第三方评论系统,比如:多说、畅言、友言、网易云跟贴、disqus等。很多都陆续停止服务或者国情原因并不好用,设置也麻烦。
2018年初升级主题的时候发现支持gitment了,一款基于GitHub Issues的评论系统。
有如下特性:
- 在前端直接引入,不需要任何后端代码
- 使用 GitHub 账号登录
- 可以在页面进行查看、发送评论,点赞,@ 等操作
- 可以在 GitHub 进行编辑、删除评论等操作
- 有完整的 Markdown / GFM 支持
- 支持代码高亮
- 基于 GitHub 的通知
用Github登陆b格满满,还支持代码高亮,基于GitHub Issues也不容易挂掉,初步感觉很符合要求。设置步骤如下:
a. 申请一个Github OAuth Application
Github头像下拉菜单->Settings->左边Developer settings下的OAuth Application->Register a new application,填写相关信息:
Application name
, Homepage URL
, Application description
都可以随意填写,
Authorization callback URL
一定要写自己博客的的URL。
填写完上述信息后按Register application
按钮,得到Client ID
和Client Secret
b. 修改配置文件
yilia
主题已经集成了gitment
,只需修改主题路径下的_config.yml
配置文件即可使用:
#5、Gitment
gitment_owner: hceng
gitment_repo: 'hceng.github.io'
gitment_oauth:
client_id: 'xxxxxxxxxxxxxxxxxx'
client_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'
gitment_owner
为GitHub用户名;
gitment_repo
填写用来存放评论的GitHub仓库,由于评论是通过issues来存放的,建议这里直接填Github Pages个人博客所在的仓库;
client_id
为申请到的应用的Client ID;
client_secret
为申请到的应用的Client Secret;
然后重新清理,生成,上传(由于要求回调URL和当前地址一样,这里必须要上传后才能测试后续的操作,本地调试是不行的)。
c. 初始化评论系统
Gitment的原理是为每一遍博文以其URL作为标识创建一个GitHub issue,对该篇博客的评论就是对这个issue的评论。
因此,需要为每篇博文初始化一下评论系统,初始化后,就在Github上会创建相对应的issue。
前面重新上传后,打开博客,可以在博文页下面看到一个评论框,还有看到以下错误Error: Comments Not Initialized
,提示该篇博文的评论系统还没初始化。
点击Login with GitHub
后,使用自己的GitHub账号登录后,就可以在上面错误信息处看到一个Initialize Comments
的按钮。
点击Initialize Comments
按钮后,就可以开始对该篇博文开始评论了, 同时也可以在对应的GitHub仓库看到相应的issue。
d. 解决标题过长,无法初始化gitment
themes\yilia\layout\_partial\post\gitment.ejs
是yilia
主题集成的gitment
源码,里面使用文章标题url
作为id
,GitHub的issue
标题有字数限制,因此可能出现自己文章的标题过长,导致无法初始化gitment
,因此这里修改源码,改为使用时间作为标题:
{% codeblock lang:shell [gitment.ejs] %}
5.8 添加字数统计
a. 安装hexo-wordcount
在博客根目录下,执行:
npm install --save hexo-wordcount
b. 文件配置
在themes\yilia\layout\_partial\post\date.ejs
下创建date.ejs
文件:
{% codeblock lang:js %}
<!-- 开始添加字数统计-->
<span class="post-time">
<span class="icon-word icon" style="color:#9a989b">
<span class="post-meta-item-text"> <span style="font-size:15px; color:#9a989b;">字数统计: </span> </span>
<span class="post-count"> <span style="font-size:15px; color:#9a989b;"> <%= wordcount(post.content) %> </span> <span style="font-size:15px; color:#9a989b;">字 </span> </span>
</span>
</span>
<span class="post-time">
<span style="font-size:15px; color:#9a989b;">| </span>
<span class="icon-clock icon" style="color:#9a989b">
<span class="post-meta-item-text"> <span style="font-size:15px; color:#9a989b;">阅读时长: </span> </span>
<span class="post-count"> <span style="font-size:15px; color:#9a989b;"> <%= min2read(post.content) %> </span> <span style="font-size:15px; color:#9a989b;">分 </span> </span>
</span>
</span>
<!-- 添加完成 -->
<!-- 修改原来的date,使样式保持一致 -->
<span style="font-size:15px; color:#9a989b;">| </span>
<time datetime="<%= date_xml(post.date) %>" itemprop="datePublished"><i class="icon-calendar icon" style="color:#9a989b" ></i> <span style="font-size:15px; color:#9a989b;"> <%= date(post.date, date_format) %></time> </span>
{% endcodeblock %} 这里可自定义图标,修改字体的大小,间距,颜色,内容。 对于图标的修改,增添,参考[黑群晖-4.2 将NAS入口添加到博客](https://hceng.cn/2019/04/22/%E9%BB%91%E7%BE%A4%E6%99%96/#4-2-%E5%B0%86NAS%E5%85%A5%E5%8F%A3%E6%B7%BB%E5%8A%A0%E5%88%B0%E5%8D%9A%E5%AE%A2) 如果出现中文字体乱码,把`word.ejs`编码格式改为`UTF-8 无BOM格式`。
5.9 添加live2d看板动画(已舍弃)
20190504更新:舍弃本块功能;
原因:略占资源,导致卡顿,新鲜感已过,实用价值比较低;
a. 安装hexo-helper-live2d
在博客根目录下,执行:
npm install --save hexo-helper-live2d
对应的卸载命令为:
npm uninstall hexo-helper-live2d
b. 安装动画模型
可使用的Live2D
动画模型效果参考:hexo live2d插件 2.0 !
这里以hijiki
为例。
可以去Github
下载,也可以使用命令下载:
npm install live2d-widget-model-hijiki
博客根目录下新建个live2d_models
目录。
如果是Github
下载,将packages
里的live2d-widget-model-hijiki
拷贝到live2d_models
。
如果是通过命令下载,将博客根目录下node_modules
里的live2d-widget-model-hijiki
拷贝到live2d_models
。
c. 配置动画模型
打开博客根目录的配置文件_config.yml
,添加如下内容:
# Live2D
## https://github.com/xiazeyu/live2d-widget.js
## https://l2dwidget.js.org/docs/class/src/index.js~L2Dwidget.html#instance-method-init
live2d:
model:
scale: 1
hHeadPos: 0.5
vHeadPos: 0.618
use: live2d-widget-model-hijiki //模型名称
display:
superSample: 2
width: 120 //模型宽度
height: 200
position: left //模型在网页的位置
hOffset: 90 //水平偏移
vOffset: -30
mobile:
show: false //是否在移动端显示
scale: 0.5
react:
opacityDefault: 0.7
opacityOnHover: 0.2
然后执行hexo clean
清理缓存,执行hexo g
重新生成博客文件,最后执行hexo d
上传到仓库。
因为新增上传过程会比较慢,
5.10 添加评论模块Valine
舍弃了gitment
,尝试使用Valine
评论。
测试中。
**5.11 添加总字数统计和网站运行时长 **
本着精简、清爽的审美,博客一直没有加太多信息,像每篇文章的字数统计,最近才加的,而且是加在的文章标题附近,也不算违和。
另外像访问统计,加过一段时间,但后来又觉得下方空间不够,信息太多,就给去掉了,最近做了修改,加在了文章末尾,也不算太违和。
至于本次准备添加的总字数统计和网站运行时长,之前想过加,但又感觉没位置了,加在其它地方,信息显示太多,比较乱,不能接受。
这两天对博客自定义修改比较多,看到“关于我”那块,比较单调,干脆加上字数统计和网站运行时长,一来显得没那么单调,二来默认不显示,整体也清爽。
a. 安装字数统计插件hexo-wordcount
在博客根目录下,执行:
npm i hexo-wordcount --save
之后就可以使用<%=totalcount(site) %>
来获取总字数。
至于放置的位置,和后面的网站运行时长放在一起。
参考文章:Hexo加入字数统计WordCount
**b. 添加网站运行时长 **
先说下如何找到修改的文件位置。
将整个主题yilia
拷贝到Linux里,执行grep "aboutme" -nr
,从结果可以看出基本都在_partial/tools.ejs
里,因此需要修改tools.ejs
。接着就是简单看看源码,大致看看应该添加在哪个位置,HTML方面的不太懂,就不班门弄斧了,修改结尾附近的内容如下:
<%if(hasAboutme){%>
<section class="tools-section tools-section-me" q-show="aboutme">
<%if(theme.aboutme){%>
<!-- 总字数统计+运行时长:添加开始位置 -->
<!-- 原内容: <div class="aboutme-wrap" id="js-aboutme"><%=theme.aboutme%></div>-->
<span class="aboutme-match" id="js-aboutme" ><%=theme.aboutme%></span>
文章总字数: <%=totalcount(site) %> <br>
<span align="center" style="font-size:15px; color:##d0dae4; " id="sitetime"></span>
<script language=javascript>
function siteTime(){
window.setTimeout("siteTime()", 1000);
var seconds = 1000;
var minutes = seconds * 60;
var hours = minutes * 60;
var days = hours * 24;
var years = days * 365;
var today = new Date();
var todayYear = today.getFullYear();
var todayMonth = today.getMonth()+1;
var todayDate = today.getDate();
var todayHour = today.getHours();
var todayMinute = today.getMinutes();
var todaySecond = today.getSeconds();
/* Date.UTC() -- 返回date对象距世界标准时间(UTC)1970年1月1日午夜之间的毫秒数(时间戳)
year - 作为date对象的年份,为4位年份值
month - 0-11之间的整数,做为date对象的月份
day - 1-31之间的整数,做为date对象的天数
hours - 0(午夜24点)-23之间的整数,做为date对象的小时数
minutes - 0-59之间的整数,做为date对象的分钟数
seconds - 0-59之间的整数,做为date对象的秒数
microseconds - 0-999之间的整数,做为date对象的毫秒数 */
var t1 = Date.UTC(2017,03,01,00,00,00); //北京时间2017-03-01 00:00:00
var t2 = Date.UTC(todayYear,todayMonth,todayDate,todayHour,todayMinute,todaySecond);
var diff = t2-t1;
var diffYears = Math.floor(diff/years);
var diffDays = Math.floor((diff/days)-diffYears*365);
var diffHours = Math.floor((diff-(diffYears*365+diffDays)*days)/hours);
var diffMinutes = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours)/minutes);
var diffSeconds = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours-diffMinutes*minutes)/seconds);
document.getElementById("sitetime").innerHTML=" 博客已运行 "+ diffYears+" 年 "+diffDays+" 天 "+diffHours+" 小时 "+diffMinutes+" 分钟 "+diffSeconds+" 秒";
}
siteTime();
</script>
<!-- 总字数统计+运行时长:添加结束位置 -->
<%}%>
</section>
<%}%>
</div>
</div>
其中var t1 = Date.UTC(2017,03,01,00,00,00);
用来设置博客创立时间。
修改之后,会导致yilia\_config.yml
里的aboutme:
所显示的效果排版比较乱,尝试了下从源头解决无果,现在的解决方案是使用
(空格)、<br>
(回车)来调整排版,比如我调整的结果:
aboutme: <br> <br> <br> <br> <br> <br> <br> <br> <br>
About me:<br>
画过电路板、玩过单片机、学习驱动中;<br>
爱好设计、计算机技术;<br>
<br>
一万小时定律践行者.<br> <br> <br> <br> <br> <br>
比较麻烦,但这个一年也改不到一次,暂时这样吧。
参考博客:Hexo 页脚增加网站运行时间统计