壹 熟悉博客
在优化博客前,首先我们需要熟悉博客的相关参数!
1.1 自定义网站配置
用记事本打开并修改本地仓库目录下_config.yml
文件,查看里面的参数:
1.1.1 主要参数的介绍
参数 | 描述 |
---|---|
title | 网站标题 |
subtitle | 网站副标题 |
description | 网站描述 |
keywords | 关键字 |
author | 作者名字 |
language | 网站使用的语言,中文zh-Hans |
timezone | 网站时区。Hexo 默认使用您电脑的时区,时区列表。比如说America/New_York 。 |
url | 网址 |
root | 根目录 |
permalink | 文章链接格式 |
permalink_defaults | 链接默认值 |
source_dir | 源文件夹,内容的存储位置,例如:文章 |
public_dir | 公用文件夹,静态文件的生成位置,例如:主页布局 |
tag_dir | 标签目录 |
archive_dir | 存档目录 |
category_dir | 分类目录 |
skip_render | 复制到原始路径,不进行渲染 |
new_post_name | 新文章的文件件名称,默认::title.md |
default_layout | 预设布局,默认:post |
external_link | 在新标签中打开链接 |
auto_spacing | 在中文和英文之间加入空格,默认:false |
titlecase | 将标题转换为小写1/大写2 * ,默认:false |
external_link.enable | 在新标签页中打开外部链接,默认:true |
render_drafts | 显示草稿,默认:false |
post_asset_folder | 启用资源文件夹功能,默认:false |
filename_case | 将文件名转换小写小写1/大写2,默认:0 |
relative_link | 把链接改为与根目录的相对位址,默认:false |
index_generator.per_page | 每页显示的文章数 |
index_generator.order_by | 发布顺序 |
date_format | 日期格式 |
time_format | 时间格式 |
per_page | 每个页面上显示的文章数 (0 = 关闭分页功能)默认:10 |
pagination_dir | 网址格式,默认:page |
theme | 主题名称 |
theme_config | 主题配置,覆盖主题默认值 |
deploy | 部署设置 |
include | 包括隐藏文件 |
exclude | 排除文件/文件夹 |
ignore | 忽略文件/文件夹 |
future | 显示未来的文章,默认:true |
highlight | 代码块的设置,默认:自定义 |
由于参数过多,只写了一部分,其他可以参考Hexo 官方文档。
注意:titlecase
参数改变后部分主题可能检测不到 Categories
和 Tags
页面。
1.1.2 分类&标签
参数 | 描述 | 默认值 |
---|---|---|
default_category | 默认分类 | uncategorized |
category_map | 分类别名 | |
tag_map | 标签别名 | 自定义 |
1.2 目录介绍
以hexo-theme-particlex
主题为例,进行介绍。
<root>
|---public # 静态网页文件
|---source # 文章(不要和主题文件夹下的source弄混,建议将文章和文章需要的图片等放在该处)
|---themes # 主题
|---<theme-name>
|---layout # 布局文件
| |---layout.ejs # 网页的基本布局
|---source # 主题资源文件,里面的内容会生成到静态文件下(区别主目录下的source,该处建议放js/css等该主题特有的修饰文件)
1.3 写作
- 创建文章
存放网站主文件夹的git终端输入:
$ hexo new [layout] <title>
# layout可选参数,用以指定创建的类型post(文章)/page(文件夹)/draft(草稿),若无指定则默认由配置文件中的default_layout选项决定
# title 必填参数,用以指定文章/文件夹/草稿标题,如果参数值中含有空格,则需要使用双引号包围
# 例如创建hello-world:
# 或
$ hexo new post hello-world
# title就是hello-world,如果不添加layout,默认就是文章post类型。
注意:如果创建带有中文的路径名称时,生成静态页面hexo g
可能会报错。解决方法是在git命令行输入git config --global core.autocrlf false
即可。
还需要说明的是文件夹scaffolds
下的post.md
文件为创建文章的模板,也就是使用hexo new post xxx
创建文件时会以post.md
的形式输出。
其实三个文件都是模板,post.md
是文章模板,page.md
是文件夹模板,draft.md
是草稿模板
参数 | 功能 | 路径 |
---|---|---|
post | 新建文章 | /source/_posts/ |
draft | 新建草稿 | /source/_drafts/ |
page | 新建页面(标签页,分类页等) | /source/ |
- 修改文章
创建的文章在source/_posts
文件夹下,我试着对hello-world.md
进行修改。修改如下:添加标签tags
、类别categories
等等,对于标签、类别可以在下面加一个 - xxx
,来实现多个标签\类别。
在主页如果不想显示全文,我们可以用 <!-- more -->
可以控制主页预览内容,后面的内容在显示全文时才出现。
1.4 文件夹
创建文件夹source
下的文件夹或者叫导航:
$ hexo new page <title>
# 例如创建tool:
$ hexo new page tool
然后在themes\particlex
下的_config.yml
文件的menu
参数下添加一个tool
选项:
运行hexo s
显示出来的是默认的.md
页面:
当然这样并不是我们需要的,我们可以对其页面进行修饰,在themes\particlex\layout
添加一个tool.ejs
:
接着在tool.ejs
内添加自己设置的页面格式布局,可以参考当前目录下的其他.ejs
文件:
然后就是跳转到该链接下,修改themes\particlex\layout
下的layout.ejs
文件:
需要跳转判断当前的页面是什么页面才能到对应的.ejs
文件下,而且这里修改的是.ejs
文件的前面那段文件名,修改完后执行hexo clean && hexo g && hexo s
就可以访问了!
1.5 主题
这是我们重点需要修改的东西,为了能达到自己喜欢的布局结构,你需要在这里进行各种配置哦,对博客的美化,还有修改成为自己独特风格的博客。
Hexo提供给我们许多模板主题,请查看Hexo主题官网下载自己喜欢的主题(https://hexo.io/themes/)。
贰 更换主题
2.1 安装主题
当我们不想使用原主题时,可以在百度或者github搜索hexo主题,找到你喜欢的主题,得到其github地址。如例子:https://github.com/korilin/hexo-theme-particle
在刚刚的Git终端输入git clone + 你找到的主题的git地址 + themes/主题名
,来下载该主题,你下载的主题都会保存在themes
文件夹内。如例子:使用git clone https://github.com/korilin/hexo-theme-particle.git themes/particle
下载particle
主题:
用记事本打开并修改本地仓库目录下_config.yml
文件,将里面的theme:
后面接的主题修改为你下载的主题的文件名。如例子文件名是particle
,所以theme: particle
:
运行命令测试:
$ hexo clean
$ hexo g
$ hexo s
2.2 主题配置
对于主题的配置,可以根据主题下的README.md
文件进行配置。
例如主题https://github.com/korilin/hexo-theme-particle
,基本上其他主题也是这些配置。
详细的配置自己摸索吧!说白了就是html\javascript\css
的配置!
2.3 重新提交部署
把配置部署完后,就可以重新提交部署了!执行这三个命令
hexo clean
hexo g
hexo d -g
出现这个界面说明成功部署:
访问用户名.github.io
,出现以下界面说明成功:
叁 好用的功能
以主题https://github.com/korilin/hexo-theme-particle
为例。
3.1 点击特效
对于点击特效的设置,我们可以百度一些感觉不错的点击特效,在主题的布局上加对应代码,例如下面这个特效,可以直接在layout.ejs
(这里这个文件只是针对particle
主题的,其他主题原理差不多)追加以下代码:
<script>
let body = document.getElementsByTagName('body')[0];
body.addEventListener('click', (e) => {
let contentArr = ['✊','😘','😍','😊','😭','😡','😋','👍','🐷','😱','💷','💵','×','🆗','№','⭐','🌙','♥','💴','☀','🐎','🐂','🐏','√'];
let randomNum = function (n) {
return Math.floor(Math.random() * n)
}
let span = document.createElement('span');
span.innerHTML = `${contentArr[randomNum(contentArr.length)]}`;
span.style.color = `rgb(${randomNum(256)},${randomNum(256)},${randomNum(256)})`;
span.style.position = 'absolute';
span.style.top = `${e.pageY}px`;
span.style.left = `${e.pageX}px`;
span.style.transition = 'all 1s ease';
span.style.zIndex = 20000;
body.appendChild(span)
setTimeout(()=>{
span.style.top = span.offsetTop - 100 + 'px';
span.style.opacity = 0;
setTimeout(()=>{span.remove()},700)
},0)
})
</script>
3.2 流星背景
和点击特效一样,在layout.ejs
追加以下代码:
<canvas id="background" style="position:fixed;top:0;left:0;width:100vw;height:100vh;pointer-events:none;z-index:-1"></canvas>
<script src="/js/background.js"></script>
对于background.js
,可以在这里下载:background.js
3.3 看板娘
首先在这里将Live2D模型Clone到本地,选择一个喜❤️欢的模型(注意必须是 Cubism3 版本的,在 live2d_3
文件夹下)复制到\themes\particle\source\model
接着需要在layout.ejs
的<head>
追加以下代码:
<script src="https://cdn.staticfile.org/pixi.js/4.6.1/pixi.min.js"></script>
然后再在layout.ejs
的<body>
追加以下代码:
<div id="L2dCanvas" style="position: relative;"></div>
<script src="/js/live2d.min.js"></script>
<script src="/css/live2d.css"></script>
<script>
var v = new Viewer({
width: 240,
height: 325,
right: "0",
bottom: "0",
basePath: "/model",
role: "这里是模型名",
mobile: true,
});
</script>
对于live2d.min.js
、live2d.css
和模型model
,可以在这里下载:
3.4 音乐播放器
和点击特效一样,在layout.ejs
追加以下代码:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer@1.10.0/dist/APlayer.min.css">
<script src="/js/APlayer.min.js"></script>
<div id="aplayer" class="aplayer" data-id="3027446018" data-server="netease" data-type="playlist" data-autoplay="true" data-fixed="true" data-listfolded="true" data-order="random" data-theme="#F58EA8"></div>
<script src="/js/Meting.min.js"></script>
对于APlayer.min.js
、Meting.min.js
,可以在这里下载:
3.5 网站运行时间的设置
和点击特效一样,不过为了将该特效居中在页面最下面,我们可以在footer.ejs
追加以下代码:
<div>
<!-- 网站运行时间的设置 -->
<span id="timeDate">载入天数...</span>
<span id="times">载入时分秒...</span>
<script>
var now = new Date();
function createtime() {
var grt= new Date("01/10/2020 00:00:00");//此处修改你的建站时间或者网站上线时间
now.setTime(now.getTime()+250);
days = (now - grt ) / 1000 / 60 / 60 / 24; dnum = Math.floor(days);
hours = (now - grt ) / 1000 / 60 / 60 - (24 * dnum); hnum = Math.floor(hours);
if(String(hnum).length ==1 ){hnum = "0" + hnum;} minutes = (now - grt ) / 1000 /60 - (24 * 60 * dnum) - (60 * hnum);
mnum = Math.floor(minutes); if(String(mnum).length ==1 ){mnum = "0" + mnum;}
seconds = (now - grt ) / 1000 - (24 * 60 * 60 * dnum) - (60 * 60 * hnum) - (60 * mnum);
snum = Math.round(seconds); if(String(snum).length ==1 ){snum = "0" + snum;}
document.getElementById("timeDate").innerHTML = "本站已安全运行 "+dnum+" 天 ";
document.getElementById("times").innerHTML = hnum + " 小时 " + mnum + " 分 " + snum + " 秒";
}
setInterval("createtime()",250);
</script>
</div>
3.6 视频播放器
直接追加代码:
<div class="video-play">
<video class="video-iframe" controlslist="nodownload" poster="<%- theme.video_background %>" controls>
<source src="/video/risingwaves.mp4" type="video/mp4">
</video>
<!-- allowfullscreen是全屏播放 -->
<!-- <iframe class="video-iframe" src="/a.mp4" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true">
</iframe> -->
</div>
肆 好用的插件
4.1 全网站字数统计
安装插件npm install hexo-wordcount --save
,接着和网站运行时间的设置一样,在footer.ejs
追加以下代码:
<div class="theme-info">
<div class="powered-by"></div>
<span class="post-count">博客全站共<%= totalcount(site) %>字字</span>
</div>
4.1 hexo文章后台管理
安装hexo-myadmin的插件
npm install --save hexo-myadmin
启动服务
hexo s
测试登录,网页输入localhost:4000/admin
,自动跳转到下图显示页面即安装成功!
由于是英文,我们可以修改node_modules\hexo-myadmin\dist\index-eaa6e6fa36.js
文件的英文单词就行:
直接附上我修改后的:index-eaa6e6fa36.js
安装完后,安全性还是有点低的,所以我们可以修改一些配置:
- 设置密码保护
在_config.yml
文件中添加:
admin:
# 登录的用户名
username: 你自己设置登录名
# 登录的密码,需要去获取bcrypt安全密钥地址是这个:https://bcrypt-generator.com/
password_hash: 你想设置密码生成的bcrypt bcrypt哈希值
# 用于使 cookie 安全,尽可能复杂
secret: dasdafdrvfsvsafdsf42343rddsa
设置并放置好之后,重新hexo s
或hexo server
操作,然后会进入登录页面,这里的密码是未加密前的密码!
- 修改
admin
等关键路径
平时我们使用sofa
可以通过admin等关键字搜索到我们的后台,我们可以修改后台路径,即修改node_modules\hexo-myadmin\server
下的index.js
,需要修改的字段为下图的admin
:
当然我们还可以修改主页index.html
和登录页面login.html
的名字,修改后名字后记得修改代码里的页面名字:
伍 参考
- 使用 Github 空间搭建 Hexo 技术博客——熟悉博客(四)
- 使用 Github 空间搭建 Hexo 技术博客——使用NexT优化博客(五)
- 使用 Github 空间搭建 Hexo 技术博客——整合优秀的ideas打造炫酷的NexT主题(六)
- 使用 Github 空间搭建 Hexo 技术博客——Hexo NexT主题内添加相册功能(七)
- 使用 Github 空间搭建 Hexo 技术博客——Hexo NexT主题内添加点击爱心效果(八)
- 使用 Github 空间搭建 Hexo 技术博客——Hexo NexT主题内设置可爱的动漫小人(九)
- 使用 Github 空间搭建 Hexo 技术博客——Hexo NexT主题内网站运行时间的设置(十)
- 使用 Github 空间搭建 Hexo 技术博客——Hexo NexT主题内添加pdf 插件(十一)
- 使用 Github 空间搭建 Hexo 技术博客——Hexo NexT主题内添加小优化(十二)
- 使用 Github 空间搭建 Hexo 技术博客——Hexo NexT主题内增加留言板块功能(十三)
- 使用 Github 空间搭建 Hexo 技术博客——分享一个类似hexo admin的hexo文章管理插件hexo-myadmin(十四)
- 博客园添加背景音乐以及播放器 或在左下方固定位置添加音乐播放器 给你的博文锦上添花,增姿添彩
- Hexo 博客搭建教程 III