Hexo博客搭建全攻略(四)高级应用

简介

截止上节,我们已经利用 Hexo 搭建起完整博客环境,现在你应该可以愉快写作并管理自己的博客啦。在实际操作过程中,可能还是会遇到一些问题不知道如何解决。下面,我将整理一些我的实际操作过程遇到一些麻烦以及解决的方法,供大家参考。

自定文字大小与颜色

Markdown语法本身没有指定文字大小与颜色的内容,但在实际写作过程中,可能会遇到这方面的需要,如下图:

在文章结尾,有一个版权声明,为了醒目,需要对文字做个颜色上的区分,相信大家在写作过程中,也会遇到这样的需求,如何解决呢?

鉴于Markdown是一种弱格式的语法,在许多Markdown工具中,为丰富一些编排效果,添加了对一些html标签的支持。 Hexo 也是如此,要实现如上图的效果,很简单,只需以html标签包起来,并对标签添加相关属性即可,代码如下:

> <font color="ff0000">版权声明:本文为原创,欢迎转载,转载请注明出处,勿用于商业用途!</font>

当然,如果要自定义文字大小,只需要在 font 标签添加 size 属性即可。

首行缩进

写作时,有些人可能有段落首行缩进的习惯,出于习惯,于是在首行开始处,手动输入空格缩进,就像在word等文字编辑工具中那样。但一预览,就会发现,首行输入的空格消失了。Markdown语法规范会自动清理首行头部的这些空格。那我们想首行缩进,该如何处理呢?

加空格缩进的思路肯定是没错的,现在就要想办法阻止我们添加的空格被清理掉。方法当然有,就是添加空格的硬编码,这样强制显示出空格,代码如下:

 //半角空格(英文)
 //全角空格(中文)

如下,就是添加了首行缩进以及自定义文字大小的示例

  本站是使用<font size=4>[Hexo](https://hexo.io)</font>框架搭建,托管在<font size=4>[Github](https://github.com/gradyu)</font>之上,博客主题使用的是<font size=4>[NexT](http://theme-next.iissnan.com)</font>。

注意,空格编码 &emsp 后面一定不要漏了 <font color="ff0000"> ; </font>这个英文分号。

图片引用

“有图有真相”曾一度风靡网络,现在谁写博文章里面没几张图片呢?Markdown写作引用图片何其简单,无非就是 ![](url) 这样简单的语法就能搞定了,这也值得拿出来说事?不然,至少有下面一些问题我需要在此探讨一下:

  1. url是远程还是本地?
  2. 如果是远程,怎样保证url上对应图片不会被别人删除?
  3. 如果是本地,我们要怎么管理这些本地图片?

本地管理

我们先说本地管理的方式,此种方法管理起来相对比较简单,但写作不太方便。以下详细介绍:

统一管理

可以在站点源码的source目录下添加一个images目录,然后将图片放入此目录下,在文章以![](/images/图片文件名) 方式引用即可。

此种方法最简单,但图片在首页或归档页里显示不出来。 Hexo 为解决这个问题,提供了资源文件夹功能。

资源文件夹

此功能默认是关闭的,可以通过将 站点配置文件 中的 post_asset_folder 选项改为 true 来打开。

_config.yml
post_asset_folder: true

打开 资源文件夹 功能后,Hexo会在每次执行 hexo new [layout] <title> 命令时自动创建一个与之对应的文件夹,此文件夹拥有与对应的md文件名一样的名字,所有与文章对应用的资源都可以放在此文件夹中,当然包括图片资源。

在文章中如何引用这些资源呢?通过Markdown常规引用语法,当然可以引用到资源,但依然无法解决在首页或归档页无法显示的问题。为此,Hexo 专门引入了特定标签来解决,语法如下:

{% asset_path slug %}
{% asset_img slug [title] %}
{% asset_link slug [title] %}

举列来说,你把 example.jpg 放入资源文件夹中,正确引用的方式如下:

{% asset_img example.jpg This is an example image %}

远程管理

也许有人会问,即然本地管理已经很好的解决了图片显示的问题,为什么我还要讨论远程管理?

可能有人已经猜到了,本地图片在部署时,最终还是要传到网络空间的。而网络空间是有限制的,以Github为例,如果我所记不差,应该只有200M空间。这空间对文字而言,应该是绰绰有余,如果有图片,那就很难说啦。有些人可能还在博客上开通相册功能,如此空间就很可能不够使用啦。

这时可能有人帮忙出点子啦,指出文章的图片可以直接引用网上的资源,这样不是就解决所有问题啦。当然,如果这图片是你网盘或者其他自己能够控制的资源,也不是不可以。我要特别提醒的是,千万不要引用自己无法控制的资源,因为这资源说不定什么时候就可能被别人移除啦。

如果你手头没有现成的图片管理资源,或者说自己也不太想直接引用自己的网盘资源,那么我就建议你使用七牛,原因如下:

  1. 提供10GB免费存储,每月10GB的免费下载流量,对个人博客来说,这绰绰有余啦;
  2. 配合极简图床可以将效率提到最高;
  3. Hexo提供七牛同步插件,一次配置好后,在部署时,可以自动上传并生成引用路径。

具体的使用方法,大家可以参考相关链接,这里不作展开啦。

文章引用

在写作时,文章里面可能需要引用自己写的另一篇文章,相信这种情况大家也比较常见,如下图:

针对这种情况,Hexo 也提供特定标签来处理,其语法如下:

{% post_path slug %}
{% post_link slug [title] %}

其中 slug 是md文件对应的文件名,title 是要在文章引用显示的标题。

文本居中

实际写作中,可能会文本居中显示的需求,Markdown本身没有相关语法, Hexo 提供了相关支持,有两种书写方式,如下:

<!-- HTML方式: 直接在 Markdown 文件中编写 HTML 来调用 -->
<!-- 其中 class="blockquote-center" 是必须的 -->
  <blockquote class="blockquote-center">blah blah blah</blockquote>

  <!-- 标签 方式,要求版本在0.4.5或以上 -->
{% centerquote %}blah blah blah{% endcenterquote %}

阅读全文

在首页显示文章的部分内容,并提供一个 阅读全文 的按钮,点击跳转至文章全文,这是一个比较常用的需求。 NexT 主题提供三种方式来控制文章在首页显示的方式,如下:

  1. 在文章中使用 `` 手动进行截断,Hexo 提供的方式
  2. 在文章的 front-matter 中添加 description,并提供文章摘录
  3. 自动形成摘要,在 主题配置文件 中添加:
auto_excerpt:
  enable: true
  length: 150

建议使用 ``(即第一种方式),除了可以精确控制需要显示的摘录内容以外, 这种方式也可以让 Hexo 中的插件更好的识别。

代码主题

NexT 使用 Tomorrow Theme作为代码高亮主题,共5款可供选择,分别是 normalnightnight bluenight brightnight eighties

更改 主题配置文件 中的 highlight_theme 字段,将其值设定成你所喜爱的高亮主题,例如:

# Code Highlight theme
# Available value: normal | night | night eighties | night blue | night bright
# https://github.com/chriskempson/tomorrow-theme
highlight_theme: normal

添加相册

Hexo中实现相册功能的主题寥寥无几,不幸的是,NexT 正好是没有实现相册功能的主题之一。毕竟博客是用来写作的,而另方面,实现相册也比较难:

  1. 图片放哪里,放在 source 文件夹中,需要解析成静态文件,图片一旦多的话就会解析的非常慢。

  2. 怎么批量获取图片 url (文件名),图片那么多,不可能一个一个的手动输入图片 url;

  3. 如何显示这些图片,你不仅需要添加 相册 页面,还需要编程实现图片的显示排版;

基于以上,我不建议大家在博客里面开通相册功能,不过如果你有强烈的开通意愿的话,我建议你使用 yilia主题 , 该主题实现了相册功能,且与 NexTPisces 模式比较接近。大家有兴趣可以自己去研究下,这也是一个很不错的主题,我就不展开了。

添加音乐播放

有人可能希望读者阅读时,自动播放些背景音乐,以给读者更好的阅读体验,要集成音乐播放服务,也很简单,步骤如下:

  1. 进入网易音乐,找到自己喜欢的乐单;
  2. 进入乐单,点击 生成外链播放器
  3. 选择自己需要的尺寸,确认是否自动播放,系统自动生成插件代码


  4. 复制html代码到相应的文章或页面,重新生成本地预览


注意:你也可以将播放器添加到侧边栏里,修改主题目录下 layout/_macrosidebar.swig ,将刚才的html代码贴到你想要放到的位置。这样读者进入站点的任何地方都会播放背景音乐。当然,你也可以将html代码中的 widthheight 改成 0 来隐藏那个播放器界面,以实现真正的背景音乐。

资源压缩

NexT 并未对 HTMLJavaScript 以及 CSS 做压缩处理。而且,如果你细心些,可能已经发现 Hexo 生成部署页面里有大量的空白,这些空白进一步也会增加文件大小,进而影响网站响应上的体验。这些虽然不影响功能,但对一些追求完美与极致的人来说,可能没法接受。如何解决呢?

有过前端开发经验的人,可能会想到在构建时,利用工具进行相关处理,gulp 可能是许多人比较容易接受的方案,这里面有相当量的开发工作,需要写一些 task,复杂度比较高,具体操作大家可以参考使用gulp精简hexo博客代码

可能许多人没有前端开发经验,对 gulp 也不太熟悉,如果也想进行资源压缩,那么我建议你试试 hexo-all-minifier 插件。能过这个插件,避免编写代码,配置也不太复杂,也可以达到压缩目的。

解决多说不稳定

相信大家使用过程中,可能偶尔遇到 多说 评论加载出错或者加载速度慢的情况。也许你建议我换掉 多说 ,但我对多说那是“深爱”啊!不换它,如何解决问题呢?

解决方法,从原理上来说其实很简单,主要思路如下:

  1. 将多说css文件由头部加载改为尾部加载;
  2. 利用七牛进行CDN加速;

具体操作可以参考多说评论不稳定,加载速度慢优化方法

双线部署

我们现在是将站点部署在 Github ,众所周知的原因,站点加载速度应该不会让大家满意。正如之前所说,我们其实可以将站点部署在 Coding。其实如果你有自己的域名,我建议你最好做双线部署,这样,国内访问解析至 Coding ,国外解析至 Github。无论如何,我们先要添加 Coding 部署。

添加Coding部署

首先,自行到Coding注册账号。

用户账号 SSH公钥 页面添加本机公钥,方式与之前在 Github 添加公钥类似。

在本机终端输入以下指令测试ssh公钥连接

ssh -T git@git.coding.net

终端上返回以下信息表明连接成功

Hello username You've connected to Coding.net by SSH successfully!

创建仓库,仓库名任意。

进入仓库,点击 代码Pages 服务,进行相关配置

修改 站点配置文件deploy 信息如下

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
  type: git
  repo:
      github: git@github.com:yourname/yourname.github.io.git,master
      coding: git@git.coding.net:yourname/yourname.git,master

执行部署

hexo d -g

观察终端控制台输出,正常情况下,你会发现 Hexo 自动将页面部署至 CodingGithub

浏览器打开 http://yourname.coding.me/blog 即可访问部署在 Coding 的博客站点。

浏览器打开 http://yourname.github.io/ 即可访问部署在 Github 的博客站点。

整理上面部署的过程,你会发现,与 Github Pages 相比,除过国内访问速度快之外, Coding 还有如下优点:

  1. 仓库名没有特殊要求,且仓库可私有,你如果对源码信息比较敏感,可以将源码管理迁移至 Coding
  2. 可以部署在任何分支上,这样我们在源码管理时,可以将源码放到 master, 网站页面部署在其他分支,避免按之前的方式,我们每次克隆仓库后,还要手动检出源码分支。
  3. 支持最多5个域名绑定,而且绑定过程仅在后台就可以完成。
  4. 绑定域后,还可以支持https,并提供免费SSL/TLS证书申请。当然,要完全支持https,你页面引用的资源的url还需要做相当的修改,这个大家可以自己去尝试。而在 Github 绑定域名后,就无法支持https。

如果你决定添加 Coding 部署,强烈建议你将源码管理也迁移过来,迁移方法这里不做具体介绍,若有疑问,可以私信我。

双线解析

双线解析前提是你必须要有一个自己的域名,如若没有,强烈建议你去 万网 购买一个便宜域名,几块钱就可以搞定。

进入域名管理后台,添加如下dns解析信息

这里我使用的二级域名,你想使用主域名,就将图中的 blog 改为 @www。如此,访问你指定的域名,国内读者就会解析到 Coding,国外读者就会解析到 Github

总结

本文是 Hexo 博客搭建系统文章的终结篇,这个系列是我在自己搭建博客站点时的经验总结,所有的东西基本都来源于网络,我仅是一个整理总结,这可以说众人智慧的结晶,在此,我想再次感谢这些人贡献,也希望我个人微薄的努力,能给大家带来帮助,最后,也要感谢大家对我的支持,我经后还会将更多更好的文章带给大家。这个系列结束后,下个系列将介绍mac系统上各种开发环境搭建,敬请大家期待!

版权声明:本文为原创,欢迎转载,转载请注明出处,勿用于商业用途!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容