hexo平台搭建

为什么搭建这个博客?

从毕业到现在已经有一年多的时间,在开发中遇到了很多问题,但总是记录在excel中,复习起来不方便,搭建这个博客刚好有个地方可以记录学习历程。

搭建工具

先整理下需要用到的工具:

  • hexo -> 生成文章
  • node.js -> 生成静态页面
  • git -> 云端存储

安装过程

下载安装上述工具(node.js,git)均可在官网下载
安装完git,点击鼠标右击选择Git Bash Here,分别输入

npm install hexo-cli -g //安装hexo
npm install hexo-deployer-git --save //安装hexo部署到git page的deployer

创建hexo文件夹

在电脑上任意位置新建一个Hexo文件夹,进入文件夹根目录鼠标右击选择Git Bash Here,输入

hexo init //在此文件夹新建所需文件,包括主题配置文件、网页等等
到这里你已经完成了本地建站,你可以在本地看到你的网页了!
如何在本地看到刚刚生成的网页?

hexo g //生成
hexo s //开启本地预览服务
开启后打开浏览器输入http://localhost:4000 即可看见网站
以上仅仅只是在本地预览,我们需要将hexo部署到github,实现云端预览

部署至Github

1、拥有github账号
2、新建仓库,仓库名:"用户名.github.io"
3、编辑hexo根目录下的_config.yml文件

deploy:
  type: git
  repository: https://github.com/mirse-partner/mirse-partner.github.io //仓库对应链接
  branch: master

4、保存上述修改后的文件,git bash 执行下述命令

hexo generate
hexo deploy //部署到github

5、成功后通过网址https://你的github用户名.github.io 即可打开你在云端部署的博客。

发表第一篇文章

只需要在根目录下

hexo new "文章名称"

即可生成你的文章,在hexo\source_posts路径下,可以看到相应的.md文件,打开文件你就可以开始创作你的第一篇文章了。

使用Next主题

打开你的网站后,你会发现默认主题并不美观,你可以随意更换主题,打开https://hexo.io/themes/ 寻找你喜欢的主题,下载即可使用主题,本初以Next主题为例,打开 https://github.com/iissnan/hexo-theme-next 下载该主题,并解压至至hexo/themes下,打开根目录/hexo路径下的_config.yml文件按,全局查找theme关键字,改为theme:next ,执行指令hexo g->hexo s ,即可在本地预览next主题,执行hexo d,即可在云端预览效果。

修改next样式

next自带四种主题样式

# Schemes
#scheme: Muse # 默认 Scheme,这是 NexT 最初的版本,黑白主调,大量留白
#scheme: Mist # Muse 的紧凑版本,整洁有序的单栏外观
scheme: Pisces # 双栏 Scheme,小家碧玉似的清新
#scheme: Gemini # 类似 Pisces

我使用的是Pisces

修改主题语言

默认主题语言是英文,我们可以将其改成中文,打开根目录文件_config.yml,找到language字段修改成language: zh-Hans,即可将主题语言改成中文。目前支持的语言可以在themes\next\languages文件夹下进行查看。

修改侧边栏

侧边栏默认标签有Home、about、tags等等,如果你想修改这些显示可以在themes\next_config.yml文件中修改,找到menu字段,即可修改成自己设置的字段,目前我用的字段是:

menu:
  主页: /|| home  # 主页链接及其图标
  #about: /about/ || user
  标签: /tags/|| tags # 标签页链接及其图标
  分类: /categories/|| th # 分类页链接及其图标
  归档: /archives/|| archive # 归档页及其图标
  #schedule: /schedule/ || calendar
  #sitemap: /sitemap.xml || sitemap
  #commonweal: /404/ || heartbeat

侧边栏点击指向

在设置好侧边栏之后,当你点击标签或分类时会出现Cannot GET /tags/ 问题,此时你需要在根目录下创建两个文件夹分别命名为tags、categories,并在文件夹中创建新文件index.md,分别在两个文件中写入

---
title: 标签
date: 2019-12-25 20:47:24
type: "tags"
---
---
title: 分类
date: 2019-12-25 20:46:21
type: "categories"
---

hexo g->hexo d后重新打开网页,点击tags,就可以跳转至点击的链接了。

发表的文章增加字数和阅读时长

此功能需要安装相关插件

npm i --save hexo-wordcount

安装完插件之后,进入next_config.yml文件,找到post_wordcount:并修改

# Post wordcount display settings
# Dependencies: https://github.com/willin/hexo-wordcount
post_wordcount:
  item_text: true //文本显示
  wordcount: true //字数统计
  min2read: true //阅读时长
  totalcount: false //站点总字数
  separated_meta: true

文章侧边栏显示文章目录

搭建博客时,发现别人的博客文章侧边栏有文章的层级目录,上网搜了下如何达到这个效果,发现几乎没有这个回答,后来经过研究,发现只要在自己的文章里,用上大标题、小标题等,侧边即可实现显示文章目录。

# //一级标题
## //二级标题
### //三级标题

增加版权声明

如果你的next版本时7.2.0,在next_config.yml文件中,找到post_copyright:false 修改为:

# Declare license on posts
post_copyright:
  enable: true
  license: CC BY-NC-SA 3.0
  license_url: https://creativecommons.org/licenses/by-nc-sa/3.0/

老版本需要修改文件,建议使用新版本Next

添加github推广

在网页上可以添加github的推广,如在右上角添加“fork me on Github”,具体实现方法为在
https://github.blog/2008-12-19-github-ribbons/ 挑选自己喜欢的样式并复制代码,在

<div class="headband"></div>

代码下方添加你刚刚复制的代码,以我复制后的代码为例:

  <div class="{{ container_class }} {% block page_class %}{% endblock %}">
    <div class="headband"></div>

    <a href="https://github.com/you"><img style="position: absolute; top: 0; right: 0; border: 0;"  width="149" height="149" src="https://github.blog/wp-content/uploads/2008/12/forkme_right_gray_6d6d6d.png?resize=149%2C149" class="attachment-full size-full" alt="Fork me on GitHub" data-recalc-dims="1"></a>

注意:你复制完代码后查看效果时,可能位置不太合理,可以在img中添加style属性设置图片位置,具体可以参考我上面的代码。

添加gitalk

1、 在Github创建一个仓库来存放issue.
2、创建github application用来授权登录,网址https://github.com/settings/applications/new ,其中需要注意Homepage URL和Authorization callback URL,第一个填写你在1、创建的issue仓库地址,第二个为你的github首页地址
3、gitalk主题样式
在themes/next/layout/_third-party/comments路径下新建gitalk.swig文件,内容为:

{% if page.comments && theme.gitalk.enable %}
  <link rel="stylesheet" href="https://unpkg.com/gitalk/dist/gitalk.css">
  <script src="https://unpkg.com/gitalk/dist/gitalk.min.js"></script>
  <div id="gitalk-container"></div>
  <script type="text/javascript">
    var gitalk = new Gitalk({
      clientID: '{{ theme.gitalk.clientID }}',
      clientSecret: '{{ theme.gitalk.clientSecret }}',
      repo: '{{ theme.gitalk.repo }}',
      owner: '{{ theme.gitalk.owner }}',
      admin: ['{{ theme.gitalk.admin }}'],
      id: location.pathname,
      distractionFreeMode: '{{ theme.gitalk.distractionFreeMode }}'
    })
    gitalk.render('gitalk-container')
  </script>
{% endif %}

在themes/next/layout/_third-party/comments/index.swig文件中,引入刚刚创建的文件
具体语句如下:

{% include 'gitalk.swig' %}

在themes/next/layout/_partials/comments.swig文件中找到最后一条

 {% endif %}

替换为

{% elseif theme.gitalk.enable %}
  <div id="gitalk-container"></div>
{% endif %}

最后在themes/next/_config.yml文件中进行gitalk配置,

gitalk:
  enable: true # 是否启用
  owner: mirse-partner # 用户名
  repo: MyGitalk # 存放评论的仓库名
  clientID: xxxx 
  clientSecret: xxxx
  admin: mirse-partner # 用户名
  distractionFreeMode: false # 评论时遮照效果的开关

执行完上面的操作,hexo clean -> hexo g->hexo d就欧克了。

未找到相关的Issues/Error:Validation Failed.

但是可能不那么顺利,这里列举下我遇到的问题,首先疯狂报错Error: Validation Failed.或者 未找到相关的 Issues 进行评论,遇到这种情况返回第2个步骤确认下填写的地址正不正确或者是themes/next/_config.yml文件中gitalk的配置,请认真检查一遍,一般都是在这儿填写错误导致。
还有可能是的你文章文件名的原因,你会发现只要把你的文章文件名xxxx.md中的xxxx改少就不会出现这个问题了,但是这明显不是解决方法,所以下面给出真正的解决方法
打开文件路径themes\next\layout_third-party\comments\gitalk.swig,修改文件中的id值使用page.date代替,具体代码如下:

{% if page.comments && theme.gitalk.enable %}
  <link rel="stylesheet" href="https://unpkg.com/gitalk/dist/gitalk.css">
  <script src="https://unpkg.com/gitalk/dist/gitalk.min.js"></script>
  <div id="gitalk-container"></div>
  <script type="text/javascript">
    var gitalk = new Gitalk({
      clientID: '{{ theme.gitalk.clientID }}',
      clientSecret: '{{ theme.gitalk.clientSecret }}',
      repo: '{{ theme.gitalk.repo }}',
      owner: '{{ theme.gitalk.owner }}',
      admin: ['{{ theme.gitalk.admin }}'],
      id: '{{ page.date }}', //location.pathname **fixed**
      distractionFreeMode: '{{ theme.gitalk.distractionFreeMode }}'
    })
    gitalk.render('gitalk-container')
  </script>
{% endif %}

具体问题的原因是因为github创建issue有长度限制,gitalk默认使用location.pathname即url来创建,只要文件名过长就无法创建,现在改成page.date就不会有影响了。

gitalk样式显示问题

解决完这个问题又遇到个抓狂的问题-gitalk样式显示问题,现象如图


gitalk.png

在网上百度了好久一直找不到答案,索性打开样式文档研究看看吧。
打开themes\next\layout_partials\comments.swig,代码整合后如下图


comments.png

发现问题所在,代码中并没有把gitalk-container样式包含在endif中,重新修改代码。直接附上comments.swig文件的全部代码:

{% if page.comments %}

  {% if (theme.duoshuo and theme.duoshuo.shortname) or theme.duoshuo_shortname %}
    <div class="comments" id="comments">
      <div class="ds-thread" data-thread-key="{{ page.path }}"
           data-title="{{ page.title }}" data-url="{{ page.permalink }}">
      </div>
    </div>

  {% elseif theme.facebook_sdk.enable and theme.facebook_comments_plugin.enable %}
    <div class="comments" id="comments">
      <div class="fb-comments"
           data-href="{{ page.permalink }}"
           data-numposts="{{ theme.facebook_comments_plugin.num_of_posts }}"
           data-width="{{ theme.facebook_comments_plugin.width }}"
           data-colorscheme="{{ theme.facebook_comments_plugin.scheme }}">
      </div>
    </div>

  {% elseif theme.vkontakte_api.enable and theme.vkontakte_api.comments %}
    <div class="comments" id="comments">
      <div id="vk_comments"></div>
    </div>

  {% elseif theme.disqus.enable %}
    <div class="comments" id="comments">
      <div id="disqus_thread">
        <noscript>
          Please enable JavaScript to view the
          <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a>
        </noscript>
      </div>
    </div>

  {% elseif theme.hypercomments_id %}
    <div class="comments" id="comments">
      <div id="hypercomments_widget"></div>
    </div>

  {% elseif theme.youyan_uid %}
    <div class="comments" id="comments">
      <div id="uyan_frame"></div>
    </div>

  {% elseif theme.livere_uid %}
    <div class="comments" id="comments">
      <div id="lv-container" data-id="city" data-uid="{{ theme.livere_uid }}"></div>
    </div>

  {% elseif theme.changyan.appid and theme.changyan.appkey %}
    <div class="comments" id="comments">
      <div id="SOHUCS"></div>
    </div>

  {% elseif theme.gitment.enable %}
    <div class="comments" id="comments">
      {% if theme.gitment.lazy %}
        <div onclick="showGitment()" id="gitment-display-button">{{ __('gitmentbutton') }}</div>
        <div id="gitment-container" style="display:none"></div>
      {% else %}
        <div id="gitment-container"></div>
      {% endif %}
    </div>

  {% elseif theme.valine.appid and theme.valine.appkey %}
    <div class="comments" id="comments">
    </div>

    {% elseif theme.gitalk.enable %}
  <div id="gitalk-container"></div>
  {% endif %}

相关指令

怎么删除文章 删除本地文章 -> hexo g -> hexo d
怎么修改文章 修改本地文章(保存修改) -> hexo g ->hexo s -> hexo d
怎么修改主题 hexo clean #删除缓存 -> hexo g ->hexo s #更改本地仓库 -> hexo d

后续,搭建过程中遇到的问题及解决方法

1、##标题 预览时不生效
正确写法 ## 标题 ##之后得有空格,语言才能生效。

2、如何在主页不显示全文
打开主题中得_config.yml ,找到 auto_excerpt:设置成true即可,
auto_excerpt中的参数可以修改显示文字:

    site_uv_header: 访客数
    site_uv_footer: 人
    site_pv_header: 总访问量
    site_pv_footer: 次

3、如何实现本站人数统计
如果你使用得是next主题,在themes\next_config.yml文件中,找到busuanzi_count:enable 设置成true即可实现人数统计,但是由于不蒜子统计的域名过期了,所以你看到的人数统计是空,修改 /theme/next/layout/_third-party/analytics/busuanzi-counter.swig文中,修改后:

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

推荐阅读更多精彩内容