Hexo 建站笔记
从搭建 Hexo + GitHub Pages,到改造 NexT 主题、接入第三方服务的系列记录。
这个系列记录我最初把博客搭起来的那段过程:第一篇是从安装 hexo-cli 到部署文章的完整上手流程;第二篇是围绕 NexT 主题的各种折腾——站点配置、abbrlink、favicon、侧边栏、emoji、背景图与注脚;第三篇则是用 LeanCloud 给文章加上阅读量统计。
从搭建 Hexo + GitHub Pages,到改造 NexT 主题、接入第三方服务的系列记录。
这个系列记录我最初把博客搭起来的那段过程:第一篇是从安装 hexo-cli 到部署文章的完整上手流程;第二篇是围绕 NexT 主题的各种折腾——站点配置、abbrlink、favicon、侧边栏、emoji、背景图与注脚;第三篇则是用 LeanCloud 给文章加上阅读量统计。
从零开始用 Hexo + GitHub Pages 搭一个静态博客:安装 hexo-cli、关联仓库与 SSH 密钥,到生成与部署文章的完整流程。
Hi,米娜桑。这里是 ZRoger 的博客。由GitHub Page和Hexo构成。
所以在这篇文章中,我记录了关于一些Hexo的东西。
什么是 Hexo:
让我们看下官方的回答:Hexo是一个快速,简洁且高效的博客框架。Hexo使用Markdown(或者其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态页面。
我觉得它还是比较受欢迎,当你想记录生活中的事情,无论是琐碎的日志,技术分享,或者其他。都可以使用Hexo创建你的静态博客。但是在文章管理方面并不是很好,但我觉得还是可以一试的。
注意 目前只记录了在
window系统下的过程。其他系统暂时没有办法涉及,以后有机会再补上。
Node.js和Git,Node.js用于安装Hexo,而Git则用于连接我们的远程仓库,别忘了创建自己的GitHub账号。下面是检查系统中Node.js版本,使用Git工具打开。$ node -vgit bash全局安装hexo-cli,为创建博客做准备。$ npm install -g hexo-cli在GitHub上创建对应的用户名仓库,格式:github用户名.github.io
在本地创建文件夹blog,打开该文件夹后,输入hexo init进行初始化。
$ cd blog$ hexo init$ npm installHexo与GitHub Page关联。先检查Git中是否有设置user name和email。
$ vi ~/.gitconfig或者
$ git config user.name$ git config user.email如果没有信息,输入命令进行设置
$ git config --global user.name "你的名字"$ git config --global user.eamil "你的邮箱"之后,再检查本地中是否存在/.ssh:
$ cd ~/.ssh$ ls接着生成密钥,用于关联到你的GitHub账号中:
$ ssh-keygen -t rsa -C "你的邮箱"id_rsa.pub填到GitHub账户上。然后使用添加密钥到ssh-agent:$ eval "$(ssh-agent -s)"添加生成的ssh key到ssh-agent中
$ ssh-add ~/.ssh/id_rsa关
ssh-agent是一个密钥管理器,将私钥交给ssh-agent保管后,其他程序需要身份验证的时候,就可以将验证的申请交给ssh-agent来完成。这里是解决每次Hexo部署新文章的时候,不需要重复输入登录名和密码。配置ssh-key让Git到GitHub切换自如,不用再验证身份。
blog文件夹下面的_config.yml文件,添加远程仓库deploy: type: git repository: 你的仓库的ssh branch: master新建一篇文章
git bash中输入:$ 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$ npm install hexo-deployer-git --save$ hexo g启动 Hexo 服务器,默认的端口4000:
$ hexo sgithub用户名.github.io$ hexo d当然也可以简单点,直接生成并更新文章到GitHub上:
$ hexo d -g大概的流程是这样的,Hexo将编辑好的md文件生成静态Web文件,当然还有其他的文件,再上传到GitHub上,添加ssh-agent,方便每次部署你的文章。
折腾 Hexo 与 NexT 主题的记录:文件结构、站点配置与 abbrlink、favicon 与页脚、侧边栏、emoji、背景图、注脚与 note 标签。
这里将记录关于Hexo一些东西,关于NexT主题,还有修改博客的东西都记录在这里。
使用hexo init初始化文件夹,并在安装好所需的依赖,其文件夹的结构:

.deploy_git:是上传到GitHub中,如果你想添加一些额外东西的话,可以到下面的public文件夹中进行添加,然后在使用hexo d -g部署到GitHub中。
node_modules:是Hexo运行时需要的一些依赖文件。
public:和.deploy_git一样,生成的静态文件,只不过不用上传而已
scaffolds:是一些模板文件,可以预先定义一些博文的模板,通用的格式
source:我们编辑的md文件生成对应的静态文件就在这里,还有生成的一些分类文件夹也在这里。
themes:存放主题文件的地方。
.gitigonre:过滤上传的文件
_config.yml:站点配置文件
db.json:Hexo 生成的缓存文件
package-lock.json和package.json:类型 Maven 项目的 pom.xml,目的是记录当前项目安装哪些依赖。
title: 网站标题subtitle: 网站副标题description: 网站描述,这里的作用是便于搜索引擎找到你的博客author: 作者language: 网站使用的语言timezone: 时区,默认是电脑使用的时区url: 网址root: 网站根目录,默认为: /permalink: 文章的永久链接格式,默认为: :year/:month/:day/:title/permalink_defaults: 永久链接中各部分的默认值注:若是把博客网站放在子目录中,比如:http://yoursite.com/blog,则需要将root改为/blog/
按照默认的生成规则,文字链接的格式是 时间 +文章名 这样的形式。如果你的文章名是中文的话,就会造成一定程度上面的困扰,也不利于SEO。
所以可以借助hexo-abbrlink,修改生成规则,减少链接的层级。 但是对hexo-asset-image有影响,需要在文章头部修改abbrlink。安装命令如下:
$ npm install hexo-abbrlink --save之后修改站点配置文件:
permalink: post/:abbrlink.htmlabbrlink: alg: crc32 # 算法 rep: dec # 进制重新部署后,文章的abbrlink由算法生成,如下形式的:
http://localhost:4000/post/17e96663.htmlhttp://localhost:4000/post/17e96663.html同时,也可以直接修改abbrlink的值,直接自定义
abbrlink: '17e96663`abbrlink: 'Hello-World`关于hexo-asset-image,原本引用图片的命令是:
使用hexo-abbrlink插件,可以自定义abbrlink的值,来简化引入图片
如果你对这个插件比较感兴趣,可以去看下hexo-abbrlink 的官网。
个性化自己的博客,注:当前使用的主题是 NexT,所以是针对NexT
NexT 仓库地址 https://github.com/theme-next
# 用于更新 NexT 项目 override: false override: true先选好一张图片,然后到这里生成相应的图片,然后把图片放在主题的资源文件夹/themes/next/source/images/下面,我新建了一个favicon文件夹用来存放站点图标
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# Set default keywords (Use a comma to separate)keywords: "Something Good"无修改
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'无修改
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先安装hexo-filter-github-emojis
npm install hexo-filter-github-emojis --save安装完成后,修改站点配置文件
# emoji表情支持githubEmojis: enable: true idName: github-emoji unicode: false styles: localEmojis:接着我们要修改下这个插件,这里和reuixiy就不同了
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>`最后补点东西
// 自定义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,然后修改如下文件:
<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>当然还有另外的方法:
// 站点背景@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
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 tag (bs-callout).note: # 风格 style: flat # 要不要图标 icons: true # 圆角矩形 border_radius: 3 light_bg_offset:default
<div class="note default"><p>default</p></div>其他还有primary,success,info,warning,danger,若不想要带有图标可以用no-icon
为 NexT 主题接入第三方服务:用 LeanCloud 记录文章阅读量,以及长期不用会被归档的注意事项。
关于文章阅读数量,可以使用LeanCloud,还有Google的,或者是不蒜子统计
这里选用的LeanCloud,可以看 doublemine 这篇文章
时间:2020 年 4 月 5 日
如果 LeanCloud 的服务长时间不用,会被停掉并且归档,所以还是需要时不时上去看看~