zroger's blog

Hexo 建站笔记

ZRoger ZRoger #Hexo

从搭建 Hexo + GitHub Pages,到改造 NexT 主题、接入第三方服务的系列记录。

这个系列记录我最初把博客搭起来的那段过程:第一篇是从安装 hexo-cli 到部署文章的完整上手流程;第二篇是围绕 NexT 主题的各种折腾——站点配置、abbrlink、favicon、侧边栏、emoji、背景图与注脚;第三篇则是用 LeanCloud 给文章加上阅读量统计。

你好,Hexo(01)

ZRoger ZRoger #Hexo

从零开始用 Hexo + GitHub Pages 搭一个静态博客:安装 hexo-cli、关联仓库与 SSH 密钥,到生成与部署文章的完整流程。

Hi,米娜桑。这里是 ZRoger 的博客。由GitHub Page和Hexo构成。 所以在这篇文章中,我记录了关于一些Hexo的东西。

关于 Hexo

什么是 Hexo:

让我们看下官方的回答:Hexo是一个快速,简洁且高效的博客框架。Hexo使用Markdown(或者其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态页面。

我觉得它还是比较受欢迎,当你想记录生活中的事情,无论是琐碎的日志,技术分享,或者其他。都可以使用Hexo创建你的静态博客。但是在文章管理方面并不是很好,但我觉得还是可以一试的。

安装 Hexo

注意 目前只记录了在window系统下的过程。其他系统暂时没有办法涉及,以后有机会再补上。

  1. 首先需要安装好Node.js和Git,Node.js用于安装Hexo,而Git则用于连接我们的远程仓库,别忘了创建自己的GitHub账号。下面是检查系统中Node.js版本,使用Git工具打开。
Terminal window
$ node -v
  1. 使用git bash全局安装hexo-cli,为创建博客做准备。
Terminal window
$ npm install -g hexo-cli
  1. 在GitHub上创建对应的用户名仓库,格式:github用户名.github.io

  2. 在本地创建文件夹blog,打开该文件夹后,输入hexo init进行初始化。

Terminal window
$ cd blog
$ hexo init
  1. 安装所需依赖
Terminal window
$ npm install
  1. 将Hexo与GitHub Page关联。

先检查Git中是否有设置user name和email。

Terminal window
$ vi ~/.gitconfig

或者

Terminal window
$ git config user.name
$ git config user.email

如果没有信息,输入命令进行设置

Terminal window
$ git config --global user.name "你的名字"
$ git config --global user.eamil "你的邮箱"

之后,再检查本地中是否存在/.ssh:

Terminal window
$ cd ~/.ssh
$ ls

接着生成密钥,用于关联到你的GitHub账号中:

Terminal window
$ ssh-keygen -t rsa -C "你的邮箱"
  1. 在连续回车 3 次,就生成密钥和公钥。将id_rsa.pub填到GitHub账户上。然后使用添加密钥到ssh-agent:
Terminal window
$ eval "$(ssh-agent -s)"

添加生成的ssh key到ssh-agent中

Terminal window
$ ssh-add ~/.ssh/id_rsa

关ssh-agent 是一个密钥管理器,将私钥交给ssh-agent保管后,其他程序需要身份验证的时候,就可以将验证的申请交给ssh-agent来完成。这里是解决每次Hexo部署新文章的时候,不需要重复输入登录名和密码。配置ssh-key让Git到GitHub切换自如,不用再验证身份。

  1. 测试一下
Terminal window
  1. 修改blog文件夹下面的_config.yml文件,添加远程仓库
deploy:
type: git
repository: 你的仓库的ssh
branch: master

生成和部署文章

新建一篇文章

  1. 在git bash中输入:
Terminal window
$ hexo new post 文章名字
# -p 参数可以指定文章的路径
$ hexo new post -p hello/hello-world # 注意里面的title为post
# 此时里面的title为hello-world
# hexo new post title -p dir/filename
$ hexo new post hello-world -p hello/hello-world
  1. 在生成以及部署文章之前,需要再安装一个扩展,不然很有可能你的文章会部署失败:
Terminal window
$ npm install hexo-deployer-git --save
  1. 生成静态文件,然后在本地上先看下效果
Terminal window
$ hexo g

启动 Hexo 服务器,默认的端口4000:

Terminal window
$ hexo s
  1. 部署文章到服务器上,查看的地址格式:github用户名.github.io
Terminal window
$ hexo d

当然也可以简单点,直接生成并更新文章到GitHub上:

Terminal window
$ hexo d -g

小结一下

大概的流程是这样的,Hexo将编辑好的md文件生成静态Web文件,当然还有其他的文件,再上传到GitHub上,添加ssh-agent,方便每次部署你的文章。

自定义Hexo与主题NexT

ZRoger ZRoger #Hexo#NexT

折腾 Hexo 与 NexT 主题的记录:文件结构、站点配置与 abbrlink、favicon 与页脚、侧边栏、emoji、背景图、注脚与 note 标签。

这里将记录关于Hexo一些东西,关于NexT主题,还有修改博客的东西都记录在这里。

Hexo 的文件结构

使用hexo init初始化文件夹,并在安装好所需的依赖,其文件夹的结构:

hexo_folders

  1. .deploy_git:是上传到GitHub中,如果你想添加一些额外东西的话,可以到下面的public文件夹中进行添加,然后在使用hexo d -g部署到GitHub中。

  2. node_modules:是Hexo运行时需要的一些依赖文件。

  3. public:和.deploy_git一样,生成的静态文件,只不过不用上传而已

  4. scaffolds:是一些模板文件,可以预先定义一些博文的模板,通用的格式

  5. source:我们编辑的md文件生成对应的静态文件就在这里,还有生成的一些分类文件夹也在这里。

  6. themes:存放主题文件的地方。

  7. .gitigonre:过滤上传的文件

  8. _config.yml:站点配置文件

  9. db.json:Hexo 生成的缓存文件

  10. package-lock.json和package.json:类型 Maven 项目的 pom.xml,目的是记录当前项目安装哪些依赖。

站点配置文件:_config.yml

网站设置

文件地址:博客/_confg.yml
title: 网站标题
subtitle: 网站副标题
description: 网站描述,这里的作用是便于搜索引擎找到你的博客
author: 作者
language: 网站使用的语言
timezone: 时区,默认是电脑使用的时区

网址

站点配置:site/_confg.yml
url: 网址
root: 网站根目录,默认为: /
permalink: 文章的永久链接格式,默认为: :year/:month/:day/:title/
permalink_defaults: 永久链接中各部分的默认值

注:若是把博客网站放在子目录中,比如:http://yoursite.com/blog,则需要将root改为/blog/

​ 按照默认的生成规则,文字链接的格式是 时间 +文章名 这样的形式。如果你的文章名是中文的话,就会造成一定程度上面的困扰,也不利于SEO。

​ 所以可以借助hexo-abbrlink,修改生成规则,减少链接的层级。 但是对hexo-asset-image有影响,需要在文章头部修改abbrlink。安装命令如下:

Terminal window
$ npm install hexo-abbrlink --save

之后修改站点配置文件:

站点配置:site/_confg.yml
permalink: post/:abbrlink.html
abbrlink:
alg: crc32 # 算法
rep: dec # 进制

重新部署后,文章的abbrlink由算法生成,如下形式的:

http://localhost:4000/post/17e96663.html
http://localhost:4000/post/17e96663.html

同时,也可以直接修改abbrlink的值,直接自定义

abbrlink: '17e96663`
abbrlink: 'Hello-World`
hexo-asset-image& 图片

关于hexo-asset-image,原本引用图片的命令是:

![代替文字](图片名.jpg)
![代替文字](./md文件名/图片)

使用hexo-abbrlink插件,可以自定义abbrlink的值,来简化引入图片

如果你对这个插件比较感兴趣,可以去看下hexo-abbrlink 的官网。


改造 Hexo 博客 todoList1

Note

个性化自己的博客,注:当前使用的主题是 NexT,所以是针对NexT

NexT 仓库地址 https://github.com/theme-next

核心配置

override

# 用于更新 NexT 项目
override: false
override: true

网站信息设置

favicon - 站点图标

先选好一张图片,然后到这里生成相应的图片,然后把图片放在主题的资源文件夹/themes/next/source/images/下面,我新建了一个favicon文件夹用来存放站点图标

文件位置:theme/next/_config.yml
favicon:
small: /images/favicon/favicon-16x16-next.png
medium: /images/favicon/favicon-32x32-next.png
apple_touch_icon: /images/apple-touch-icon-next.png
safari_pinned_tab: /images/logo.svg
#android_manifest: /images/manifest.json
#ms_browserconfig: /images/browserconfig.xml

keywords - 默认关键词

# Set default keywords (Use a comma to separate)
keywords: "Something Good"

rss - 订阅设置

无修改

footer:
# 建站年份
since: 2018
# 年份后面的图标,为 Font Awesome 图标
# https://fontawesome.com/v4.7.0/icons/
icon: rocket
# 作者
copyright:
# 是否展示Hexo的地址
powered: true
# 是否展示使用Hexo的主题
theme:
# Theme & scheme info link (Theme - NexT.scheme).
enable: true
# Version info of NexT after scheme info (vX.X.X).
version: true
# 自定义文本
#custom_text: 'Hello'

SEO 设置

无修改

菜单设置

menu:
home: / || home
about: /about/ || vcard
tags: /tags/ || tags
archives: /archives/ || calculator
# 开启图标
menu_icons:
enable: true

主题方案选择

# Schemes
#scheme: Muse
#scheme: Mist
scheme: Pisces
#scheme: Gemini

侧边栏设置

# 社交链接
social:
GitHub: https://github.com/yourname || github
# Blog rolls
# 侧栏友链设置
links_icon: globe
links_title: 神奇的链接
#links_layout: block
links_layout: inline
links:
UserA: xxxx
UserB: ssss
# 侧边栏头像设置
# Sidebar Avatar
# in theme directory(source/images): /images/avatar.gif
# in site directory(source/uploads): /uploads/avatar.gif
# 将头像放在blog/source/uploads中(新建uploads)
avatar: /uploads/logo.jpg

emoji 表情(有问题)

先安装hexo-filter-github-emojis

Terminal window
npm install hexo-filter-github-emojis --save

安装完成后,修改站点配置文件

文件位置:~/blog/_config.yml
# emoji表情支持
githubEmojis:
enable: true
idName: github-emoji
unicode: false
styles:
localEmojis:

接着我们要修改下这个插件,这里和reuixiy就不同了

文件位置:~/blog/node_modules/hexo-filter-github-emojis/index.js
if (options.inject) {
$('body').append(`<script>
document.querySelectorAll('.${options.className}')
document.querySelectorAll('#${options.className}')
.forEach(el => {...});
</script>`)
}
.
.
.
return `<span class="${options.className}" style="${styles.join(';')}" data-src="${emojis[name].src}">${codepoints}</span>`
return `<span id="${options.className}" style="${styles.join(';')}" data-src="${emojis[name].src}">${codepoints}</span>`

最后补点东西

文件地址:\blog\themes\next\source\css_custom\custom.styl
// 自定义emoji样式
img#github-emoji {
margin: 0px;
padding: 0px;
display: inline !important;
vertical-align: text-bottom;
border: none;
cursor: text;
box-shadow: none;
}
// 文章超链接样式(为emoji特设)
.post-body a {
border-bottom: none;
text-decoration: underline;
}
.post-body a:hover {
border-bottom: none;
text-decoration: underline;
}
// 标签云页面超链接样式(为emoji特设)
.tag-cloud a {
border-bottom: 1px solid rgb(80, 115, 184);
text-decoration: none;
}
.tag-cloud a:hover {
border-bottom: 1px solid rgb(161, 102, 171);
text-decoration: none;
}
// 文章元数据中categories的样式(为emoji特设)
a.categories {
border-bottom: none;
text-decoration: underline;
}
a.categories:hover {
border-bottom: none;
text-decoration: underline;
}
// tabs标签(为emoji特设)
.post-body .tabs ul.nav-tabs li.tab a {
text-decoration: none;
}
// 图片下方标题设置(为emoji特设)
a.fancybox{
text-decoration: none !important;
}
// 按钮样式(为emoji特设)
.btn {
text-decoration: none !important;
border: 2px solid #222 !important;
}

然后直接去 Emoji Cheat Sheet 点一下自己想要的表情复制,再粘贴到自己的文章中即可😝😎🐾

背景图片

我们需要用到jquery-backstretch,然后修改如下文件:

文件位置:/themes/next/layout/_layout.swig
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-backstretch/2.0.4/jquery.backstretch.min.js"></script>
<script>
$("body").backstretch("https://背景图.jpg");
</script>
</body>

当然还有另外的方法:

文件位置:/theme/next/source/css/_custom/custom.styl
// 站点背景
@media screen and (min-width:1200px) {
body {
background-image:url(/images/图片);
background-attachment:fixed;
background-position:50% 50%;
opacity: 0.97;
}
#footer a {
color:#eee;
}
}

文章注脚

安装hexo-footnotes2

执行位置:~/blog
npm install hexo-footnotes --save

使用的方法:

basic footnote[^1]
here is an inline footnote[^2](inline footnote)
and another one[^3]
and another one[^4]
[^1]: basic footnote content
[^3]:
paragraph
footnote
content
[^4]: footnote content with some [markdown](https://en.wikipedia.org/wiki/Markdown)

引用

用法:

人生乃是一面镜子, 从镜子里认识自己, 我要称之为头等大事,
也只是我们追求的目的!

效果:

人生乃是一面镜子, 从镜子里认识自己, 我要称之为头等大事, 也只是我们追求的目的!

note 标签

现在主题中启动 note 标签

文件位置:~/blog/themes/next/_config.yml
# Note tag (bs-callout).
note:
# 风格
style: flat
# 要不要图标
icons: true
# 圆角矩形
border_radius: 3
light_bg_offset:
Note

default

<div class="note default"><p>default</p></div>

其他还有primary,success,info,warning,danger,若不想要带有图标可以用no-icon

参考资料

​

Footnotes

  1. reuixiy––打造个性超赞博客 Hexo+NexT+GitHubPages 的超深度优化 ↩

  2. hexo-footnotes ↩

NexT&第三方服务

ZRoger ZRoger #Hexo#NexT

为 NexT 主题接入第三方服务:用 LeanCloud 记录文章阅读量,以及长期不用会被归档的注意事项。

关于文章阅读数量,可以使用LeanCloud,还有Google的,或者是不蒜子统计

这里选用的LeanCloud,可以看 doublemine 这篇文章

时间:2020 年 4 月 5 日

如果 LeanCloud 的服务长时间不用,会被停掉并且归档,所以还是需要时不时上去看看~