记录使用Hexo+Github搭建静态博客中的问题

hexo d后提示git@github.com: Permission denied (publickey)

解决方法:添加SSH密钥
打开Terminal

  1. git config –global –list 验证邮箱与GitHub注册时输入的是否一致
  2. 通过git config –global user.name “yourname”,git config –global user.email “email@email.com ”(这里得名字和邮箱都是注册github时用的)设置全局用户名和邮箱。
  3. ssh-keygen -t rsa -C “这里换上你的邮箱”,一路回车,在出现选择时输入Y,再一路回车直到生成密钥。会在/Users/**/路径下生成一个.ssh文件夹,密钥就存储在其中。
  4. 到git仓库,添加秘钥.用word打开.pub文件,复制其中内容到输入框。
  5. ssh -T git@github.com 测试一下通不通,即可正常使用。不通操作以下两步:
    1
    2
    ssh-agent -s
    ssh-add ~/.ssh/id_rsa
    参考文献:
    CSDN博主「JT.X」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_43768946/article/details/90411154

备查

hexo clean 清除public文件夹
hexo g 生成新文件
hexo d 部署文件
hexo s 本地查看
Terminal 打开的位置:C:\yanxiaocn.github.io

部署后网页端无响应

可能是站点配置文件的deploy下某个字段冒号后面少加了空格,一个不行就加两个。

1
2
3
4
deploy:
type: git
repo: git@github.com:yanxiaocn/yanxiaocn.github.io.git
branch: master

使用hexo n <name>时没能在public文件夹中生成相应的静态文件

在为文章添加tag时,一定要在-后面加上空格,否则无法被识别。

1
2
3
- hexo
- 静态博客
- 问题处理

为站点添加本地搜索

虽然Hexo官方Wiki上给出了用Swiftype实现站内搜索的方法,但是我详细查询之后发现Swiftype现在不再提供免费服务了。新注册用户在试用期结束之后不能再像以前那样可以继续以比较低的权限继续使用,而最低付费版本每月也要17美元左右。

使用Swiftype对钱包太不友好,再加上因为我身在墙内而造成的访问缓慢和定期登陆Swiftype手动获取网站文章的繁琐,让我很快就放弃了这个途径,甚至想要放弃在博客中添加站内搜索这个功能——毕竟现在也没有几篇文章,站内全文搜索目前没有那么必要。

不过后来我惊喜地发现,竟然有一个Hexo插件hexo-generator-search(项目github)可以直接完成这个功能。

原理大概是在执行hexo g的过程中,插件会同时生成一个包含网站所有文章文本的XML文件,搜索时对比检索词和这个XML文件就可以迅速找到匹配的文章。

这个方法不用担心第三方服务停止,稳定性高,而且没有被墙的问题,目前看起来是非常理想的解决方案了,至于博文增多到一定程度后会不会卡的问题,等它出现了再解决也不迟。具体实现过程是这样的:

  1. 使用git安装插件
    1
    npm install hexo-generator-search --save
  2. 站点配置文件yourname.github.io\_config.yml中配置插件
    新增以下内容到任意位置:
    1
    2
    3
    4
    5
    search:
    path: search.xml
    field: post
    format: html
    limit: 10000
  3. 主题配置文件themes/next/_config.yml中启用本地搜索功能
    local_search字段下的enable的值,改成true
    1
    2
    3
    4
    5
    6
    7
    8
    local_search:
    enable: true
    # if auto, trigger search by changing input
    # if manual, trigger search by pressing enter key or search button
    trigger: auto
    # show top n results per article, show all results by setting to -1
    top_n_per_article: 1
    # unescape html strings to the readable one

这时只要重新生成静态文件,部署到Github,你就会发现Hexo博客中出现了一个搜索按钮,通过输入检索词就可以对站内文章进行全文检索了。

这个搜索按钮是Hexo自动添加的,与使用的主题无关,因此不需要修改主题配置文件。我在配置的过程中就误以为搜索项与添加自定义菜单项一样需要手动创建页面,将主题配置文件menu字段中的search的注释去掉了,导致最后生成的静态网页上出现了两个搜索框。

参考文献:
[1] 百度学术
[2] Hexo博客无法搜索的终极解决方法
[3] 为Hexo blog博客创建本地搜索引擎

front-matter中为文章添加多个分类

1
2
3
4
categories:
- [A, A1]
- [B, B1]
- [C]

此时这篇文章同时包括A、B、C三个分类,其中A1、A2分别是A、B的子分类。

改变theme后部署博客仍然显示旧主题

可依次尝试以下方法:

  • 清除浏览器缓存,然后重新加载
  • 先执行hexo clean,再部署
  • 删除根目录下的_deploy_git文件,重新生成静态文件并部署

添加自定义菜单

  1. 主题配置文件中添加菜单名称
    名称在hexo中是一个代码,有点像编程时用的变量,用来匹配和检索翻译,如“works”。
    themes/next/_config.ymlmenu字段下添加以下内容:
    1
    works: /works
  2. 确定菜单对应的图标名
    Font Awesome是一款基于css框架的网页字体图标库,它含有675个图标,完全开源并且免费。hexo可以通过图标名直接获取Font Awesome上的对应图标,不用下载保存到本地。所以需要做的事就是打开Font Awesome,在上面找到喜欢的图标的名字,如“book”。
  3. 主题配置文件中添加图标
    在第一步添加的works名称后继续添加图标名:
    1
    works: /works|| book #works为自定义菜单名称,book为图标名字
  4. 设置自定义菜单的显示文本
    用于被第一步中设置的菜单名称查找的翻译文本保存在themes/next/languages/语言种类.yml中。若要添加一个自定义菜单,只需要在其中的menu字段中添加以下内容:
    1
    works: 文集  #文集为works在网页上显示的中文文本
  5. 自定义菜单显示页面
    1
    hexo new page 'name'
    此时Hexo会自动在~\yourname.github.io\source\目录下生成一个name文件夹,其中有一个代表页面展示效果的文件:index.md。你可以按自己想要的布局去编辑这个文件,最终这个文件被渲染为html文件展示在你的博客上。

设置文章预览

这个显示效果属于主题的控制范围,因此在主题配置文件中,将自动预览字段auto_excerpt的功能启动就可以了:

1
2
3
auto_excerpt:
enable: true #将此处改为ture
length: 150 #自动预览的长度

更多参考资料

NexT主题项目Wiki
NexT主题官方网站
Hexo官方文档
NexT主题预览

自我提醒

在博客搭建好并添加必要的功能之后,就应该把注意力放在“创作更多更有用的博文”上,而不是沉迷于“猎奇新功能”,否则最后将得到一个外观非常美丽而内容非常贫瘠的博客。

使用太多hexo专属插件会让Markdown文本在不同平台之间的可迁移性降低,这就得不偿失了,毕竟我当初使用Markdown就是看中了它在可以在不同平台上迅速完成排版的特性。