Hexo的搭建和后续优化等踩坑经验记录
点此展开
为什么要做这个网站
1.把每天的知识感想记录下来,缓解自己的知识焦虑感,也给其他人一个看到自己想法的机会。
2.可以把自己很多的数据资料等安心的放在这里保存,作为自己的一个小窝。
曾经有过的设想
1.提供RSS浏览功能
2.TOP10新闻,天气,股票等
3.相关资讯推送
4.网盘能力
5.表情包的存放库
只能说想的很美好,但是实际上实践有点困难,都是黑历史QAQ,当然不排除以后有机会实现这些
如何建站
建造工具的选择
1.动态网站:网站的交互性比较强,有登录注册评论等这些功能。这类网站的制作工具主要是Typecho、Wordpress等。
好处:这类网站的制作工具功能十分齐全和强大,且只要有网就可以随时随地连接上自己的数据库进行对博客的管理和更新。
坏处:需要一个数据库,这就意味着需要花一定的金钱成本。
2.静态网站:整个网站是静态的,没有过多的交互。如github pages
好处:简单方便
坏处:交互性没动态网站强
从个人用户的角度来看,我们直接选择静态网站即可,简单也方便,网上教程也十分多。
服务器和域名
网站离不开服务器和域名。服务器是网站文件寄托的位置,而域名就是一个网站的地址。
服务器我们可以选择国内各大云服务器服务商的,如阿里云、腾讯云等等。
也可以选择代码托管平台。这些代码托管平台提供了一个网站代码存放的位置。对于自己的钱包而言,我更推荐放在托管平台上面,免费。如果你想用钱换更快的速度,那也可以选择前者。
托管平台 |
---|
Github Pages(最常用) |
Netlify |
Vercel |
Coding(国内) |
而域名,如果个人要求不高,可以直接使用免费的github pages的 默认用户名+.github.io 这么一个域名,而如果你嫌弃这个名字实在太长,也可以去国内各大云服务提供商买个域名,现在域名都很便宜了。
所以基本上参考了很多资料。使用的是Hexo+Github Pages+Next+Typora。非常常规。
在开始之前
因为Hexo是把Markdown转化为Html的,你需要对Markdown的语法有一定的了解。但不用担心,Markdown的语法十分简单,很容易上手。
当然在Hexo中也可以直接用html的语法来书写内容,可以拿html语法代替markdown。因为hexo就是为了把简单的markdown转化为复杂的html而存在的。
从对后面维护blog的角度来说,更希望各位能对html有一定的知识,对修改blog内的原始文件如swig和添加css代码等有很大的帮助
开始
从我懵懵懂懂一点知识都没有接触到后面完善blog以来,我都是利用下面这些文章一点一点把自己网站建了起来。很多问题我相信你都可以在接下来这些文章里找到答案。
参考的他人文章
点此展开
搭建Hexo博客中遇到的那些“坑”_Chak Aciano的博客-CSDN博客_validating config
Hexo的常用指令合集_连接数据库的博客-CSDN博客_hexo命令
Hexo博客的搭建及NexT主题一些问题的解决方案_sixsheep17的博客-CSDN博客
hexo-theme-next/README.cn.md at master · iissnan/hexo-theme-next
Hexo_更换主题(Next)_CHN_Joker的博客-CSDN博客_hexo更换主题
Hexo博文加密思路总结_程序员在旅途的博客-CSDN博客_hexo加密
【Hexo】nexT主题使用攻略基础——添加分类、标签及关于_离明zh的博客-CSDN博客_hexo next 标签
【个人网站搭建】GitHub pages+hexo框架下为next主题添加分类及标签_wangqingchuan92的博客-CSDN博客
hexo之next主题优化篇2_CoderCXF的博客-CSDN博客
hexo之next主题优化篇1_CoderCXF的博客-CSDN博客_# a button to open designated chat widget in sideb
Hexo中插入图片和音乐的几种方式_sunfove的博客-CSDN博客_hexo插入图片
Hexo博文置顶(自定义排序) - 灰信网(软件开发博客聚合)
Typora 常用快捷键大全_一&粟的博客-CSDN博客_typora快捷键
解决Hexo博客模板hexo-theme-next的翻页按钮不正常显示问题 - xiejava - 博客园
为Hexo添加Valine评论系统_昕zqx的博客-CSDN博客_hexo valine
Chrome浏览器提示您的连接不是私密连接解决办法_孤寂的游魂的博客-CSDN博客_您的链接不是私密链接,攻击者可能会窃取您的信息谷歌
hexo 发布之后 gitpage 自定义域名失效_许许盛的博客-CSDN博客
Hexo的SEO优化-使用abbrlink设置永久链接为随机值 - 腾讯云开发者社区-腾讯云
【图床搭建】腾讯云COS+PicGo+Typora图床搭建_lonelysnowman的博客-CSDN博客_腾讯图床
Typora+路过图床实现插入图片即上传图床_蒋楼丶的博客-CSDN博客_路过图床
Hexo 双线部署到 Coding Pages 和 GitHub Pages 并实现全站 HTTPS_ITBOB • 鲍勃的博客-CSDN博客_coding pages
终于解决了hexo开启懒加载后图片无法立即显示的问题_东曜的博客-CSDN博客_hexo首次加载页面问题
npm常用命令(npm install --save 和npm install --save-dev的区别)_陈坚泓的博客-CSDN博客
Hexo添加自定义分类菜单项并定制页面布局 | Finisky Garden
同时支持置顶和隐藏文章的 hexo 生成器插件(hexo-generator-index-custom)_0o酱的博客-CSDN博客_hexo generatur index
自己写的文章
点此展开
个人一些杂碎笔记的集合
这些篇幅较短,就不单独每个都开一个md文件写一篇博客了,直接把这里作为一些简短笔记的集合。
点此展开
1.要注意常用多用hexo cl这条命令,有时候不清理之前的缓存,bug和问题就一直存在,在部署之前都最好先用一用cl清除缓存。
2.在安装了主题后不能使用是因为hexo5.0之后删除了swig,需要自己安装。
3.在github的库中是main而不是master目录,记得在_config.yml中branch: 一栏的master改为main
4.在部署之后github会审核一次才会更新内容,需要等待,审核过程可以在仓库的action一栏查看过程。只有三个绿才会更新网站。
5.实际上hexo中心在本地,只是提交到了Github上,所以其部署过程全按照你本地的文件来部署,你本地是多少上面仓库就会变成和本地一样,你在本地删了文件仓库也会删掉那个文件。所以删文章是在本地进行,然后再部署就行了。
6.在建站时部署前可以开hexo s命令监测,如果有什么错误可以第一时间排查解决,否则很难一个一个扒开来看。
7.背景头像等图网上的教程都是插入本地图片,这样上传到github上打开很慢,建议把图片文件改为图床里的url,能加快速度(只要在相应的配置文件下的命令下)
1 | XXX: url() |
在括号内输入自己的图片外链或者本地图片路径(不推荐本地图片,速度慢)(如用本地图片路径则填的路径是/image/XXX.jpg,前面的绝对路径不用写)
8.每次上传到github上,自己的自定义域名总是不绑定对应xxx.github.io的仓库,可以在source文件夹下面新建一个名叫CNAME的txt,在里面写入自己的域名
然后保存去掉后缀名
这样之后hexo d上传不会再需要手动加自定义域名
9.查看自己的hexo安装了多少插件和如何删除
hexo插件安装路径在根目录下的node_modules文件夹里面含有全部插件和自己的一些依赖包,插件都是hexo-XXXXX开头的
卸载就是和npm install一样,命令改为
1 | npm uninstall |
同样的,可以考虑加与不加--save
参数
卸载的时候记得查看一下残留在根目录和主题的_config.yml内的插件内容
和文章md文件开头插件所添加的一些信息
10.在博客内嵌入视频:
首先是b站,可以在旧版网页版中点分享获取嵌入代码
如果是自己的视频可以在自己的创作中心中点要嵌入的稿件的分享按钮获取嵌入代码
YouTube则更简单,点开任意一个视频右键获取嵌入代码即可
其他平台大同小异,核心是获取嵌入代码(即iframe代码)。
在markdown文章中编辑嵌入视频的大小:只要在代码内加入width=XXX height=XXX(X为数值)即可调整大小。
在F12调试工具中打开这个点击网站中想要分析的部分,会跳到html相关部分的源代码。比如点击视频也许就有机会直接找到外链,下载视频。
、
成功案例
11.让博客首页文章摘要只显示图片和空白
next的文章摘要会跳过图片而直接把文字放在摘要,如果要只显示一张图片,只需开头插入图片,在图片末尾回车,切换到下一行输入
1 | <!-- more --> |
这是手动断阅读摘要选取长度的标志,往后面的文字就不会显示在首页文章摘要了。发现网络上很多文章里这条命令都是错的,或者格式不对。--
后和--
前都应该是有一个空格才对。
如果这条命令输入正确的话,在Typora里面这条命令会变成蓝色。
如果想让文章显示空白简介的话,在文章第一行打几个空格(至少四个空格),然后第二行打more截断。
1 |
|
点此展开next5.1.4旧版本才适用的内容
12.next图标(Next 5.1.4旧版本适用)
next用的是FontAwesome的图标库,先确定next主题内的FontAwesome版本
1 | 打开themes\next\source\lib\font-awesome\css\font-awesome.css |
我的是4.7版本,打开https://fontawesome.dashgame.com/,选择自己的版本
选择自己喜欢的图标点击右边的复制使用,但会发现用不了。其实只要把复制的名字中的"fa-"部分去掉就行了,只需要后面的部分。比如fa-buth就要改成单独的buth
Next 8新版本
在引用图标时候不要去掉fa-,直接在fa-xx前面加个fab,格式为
fab fa-xx
13.next主页文章摘要,文章内文字分行但摘要不换行
在md文件内要换行的地方加上
1 | <br> |
有时候用br标签不管用,在后面加
1 | <!-- more --> |
14.(Next旧版本5.1.4才适用,新版本已修复)
hexo的next主题,在点击头像下面的日志时无法正常跳转,显示cannot get archives%7C%7C%20archive
打开/themes/next/layout/_macro/sidebar.swig,找到这里
1 | {% if config.archive_dir != '/' and site.posts.length > 0 %} |
改为
1 | {% if config.archive_dir != '/' and site.posts.length > 0 %} |
也就是把原来的第3、4、5、7行删掉。
15.(next旧版本才适用,新版本已修复该bug)
next文章点目录树不跳转打开F12点击目录树显示错误
找到\themes\next\source\js\src\post-details.js,打开文件
找到文件的72行左右
1 | $('.post-toc a').on('click', function (e) { |
在第三行下加一行代码,变为
1 | $('.post-toc a').on('click', function (e) { |
这样点击目录树可以跳转了。
16.(是Next5.1.4旧版本的权宜之计,在更新Next 8新版本后问题得到解决。强烈推荐更新)
文章目录只显示同级目录,不能显示多级目录
语法要求是:在写md文件的时候标题有h1到h6,目录之间不能跳级跨级。比如h1就后面只能h2,不能h1下面接着h3。
同时,next5.1.4版本有Bug,当目录名为中文的时候就无法展开下一级目录。这个目前还无法修复,只能暂时使用英文来代替,或者用html语言跳转方法绕过bug
先在要跳转到的位置写上
1 | <a id=""></a> 在""之间写一个任意的跳转ID |
文章显示的时候不会把这串代码显示出来,所以直接在后面写你自己跳转显示部分的内容就行了。
在设置跳转按钮的地方写上
1 | [链接名称](#锚点id) 链接名称任意选,id面前记得有一个#号 |
17.新版本Next已经支持内置显示文章更新时间
显示文章更新时间
只有发布时间其实是不够准确的。我们需要一个能够显示更新时间功能。
1 | 打开themes\next\layout\_macro\post.swig |
找到这段
1 | <div class="post-meta"> |
改为
1 | <div class="post-meta"> |
1 | 再打开\themes\next\languages\zh-Hans.yml |
在post栏处加上一行
1 | post: |
1 | 再打开\themes\next\_config.yml |
文件最后处加上
1 | display_updated: true |
18.在hexo-asset-image的加持下快速插入多张本地图片
直接将本地图片拖入相对应的文件夹内,然后把图片拖入typora中。这时直接拖图片进来显示的路径是绝对路径。在Typora中打开源代码模式全选复制
再把复制到word中,利用word的“替换”功能,把绝对路径前面部分替换成无
再把代码拖入typora即可(不过现在用图床,这个插件可以说基本用不上了)
19.Hexo对花括号的支持很差,很容易出问题,能不在md文件中使用花括号就不使用。否则有可能出现hexo d部署之后文章只显示一部分的bug。
20.hexo-blog-encrypt这个博文密码加密插件,在使用next主题的情况下,加密博文打开后不会有目录树功能。
关于这个bug,作者已经在github的 readme 上写了解决办法
然而next主题是没有这个文件的
参考:https://github.com/D0n9X1n/hexo-blog-encrypt/issues/58
next对应的,找到themes\next\layout\_macro\sidebar.njk"
中的第四行
1 | {%- set toc = toc(page.content, {class: 'nav', list_number: page.toc.number, max_depth: page.toc.max_depth}) %} |
换成
1 | {%- if page.encrypt == true %} |
不过这样,加密的文章目录在输入正确密码之前也会显示出来,toc功能正常能用了但暴露了toc的内容,看自己怎么取舍。
个人觉得toc显示出来也没问题,但toc功能还是要有的,于是解禁了。
21.在md编辑器中打一行空格实际上在网页里是没有空行的,要做出空行来,请在空行输入
1 | <br> |
22.在除了侧边栏以外区域显示文章目录:
安装插件
1 | npm install hexo-toc --save |
再在config里加以下内容
1 | toc: |
接着直接在md文章内要显示文章目录的地方加上
1 | <!-- toc --> |
这个显示的效果等效于在csdn许多文章开头显示的的内容目录。
但是使用这个插件会和next侧边栏的目录冲突,导致Next的侧边栏目录树不能正常跳转
可以使用这个插件的修改版:https://github.com/erictt/hexo-toc-dllcn ,防止了和next侧边栏导航的冲突。
安装插件(记得先卸载上面的原hexo-toc插件):
1 | npm i @dllcnx/hexo-toc |
在根目录的config文件下添加
1 | mdtoc: |
用法和原hexo-toc一样,都是在文章需要添加目录的地方输入
1 | <!-- toc --> |
Next文章目录的标题开头第一个字不要使用特殊符号,否则有可能造成无法点击目录树跳转。
但是使用这个插件的时候会有几个问题。
第一个是标题内英文必须全小写,否则无法跳转。同时基本上标题几乎不能有任何标点符号,否则都有可能无法跳转。
或者使用其他markdown生成toc目录的项目,github上面有很多,比如markdown-toc,但是hexo-toc插件比这些项目都更傻瓜化,使用方法更简单。
next自带的目录树会自动在目录前面加数字,因为个人更喜欢自己添加序号,不太喜欢这个功能
可以在config里面关闭自动添加数字
把number一项改为false
同时,expand_all: true
可以让文章的目录默认全部展开
23.关于在typora内写文章
在一行文字后回车,下一行的文字和上一行的文字会有间隔,取消间隔的办法是shift+回车,这样上下行之间就没有间隔了。
24.在文中折叠部分内容
格式如下:
1 | <details> |
第一个<summary>
标签前要打四个英文空格
在两个<summary>
标签之间写折叠的提示信息
第三行****
处意味着要写入的被折叠信息。可以多行等操作。
这个格式,被折叠的内容是默认折叠的,如果要默认展开,则把<details>
改为<details open>
2024.5.23
也可以使用插件,我觉得不好用。
折叠相关的插件:hexo-sliding-folding hexo-hide
前者不能嵌套折叠,后者太过简陋
于是在next主题文件内添加folding文件来增加折叠功能。
参考来源:https://github.com/theme-next/hexo-theme-next/pull/1489
这个Pull requests一直没有得到合并,所以就按照作者写的文件来自己手动创建吧。
themes\next\scripts\tags
文件夹下新建一个folding.js
文件
1 | ; |
themes\next\source\css\_common\scaffolding\tags
下添加一个folding.styl
1 | // gap |
在同目录的index.styl
下,在末尾添加一行
1 | @import 'folding'; |
具体如何在文中用,themes\next\scripts\tags
文件夹下的folding.js`文件的首几行已经有详细介绍,这里不多赘述。
25.在markdown内,可以用`来显示代码段内容,使其在文章中更为凸显。
效果展示:一个函数 print()
用法:
1 | `print()` |
26.有时想修改博文但是由于post文件夹内的md文件名都是随便起的,找到对应的md文件总需要很多时间。
可以在备份到github上的hexo原文件的仓库来查找,复制对应博文的一部分文字到搜索栏中搜索即可。
同样的,通过这个办法可以通过关键词搜索博客所有的源文件。
27.关闭特定文章的评论区
在文章页头上添加
1 | comments: false |
28.深色模式
next自带的深色模式不能切换,用第三方插件替换
1 | npm install hexo-next-darkmode --save |
config.yml里写
1 | darkmode_js: |
不过这个深色模式,还不如小米自带浏览器的深色模式功能。
关于插件
hexo本身有很多的插件可以使用,你可以根据自己的情况来下载一些自己喜欢的插件来完善自己的网站。
最后
比起建站几十分钟的时间耗费来看
后期维护和完善blog所要耗费的时间会比这多更多。