简介
说来话长,很长很长。血压飙了好几晚。
- 看了凯圣王的视频,做了一些健身理论的笔记
- 笔记博客加了密,结果发现加密的博客无法显示目录。搜索了一下,发现大部分的解决方案都是针对较新版本的hexo-blog-encrpyt
- 用npm更新hexo-blog-encrpyt,脑子突然一抽,索性把hexo及所有插件都更新了
- 大难临头
- 首先,hexo g开始报错,发现是MathJax渲染有冲突。搜索了一下,发现很多解决方案是四五年前的,因为我一开始配置hexo的时候也改了挺多地方。试了半天,总算改好了
- 之后,发现前后博客跳转的箭头有问题,所以又去改了js
- 之后,发现加密博客输入密码没反应。搜索了一下,发现现在的版本需要https才可以正常使用
- 尝试从http改成https,发现github pages现在对CNAME的自定义域名可以强制https
- 论坛说谨慎勾选,勾了之后模板都错了,而且不能还原。我心想模板错了就改改呗。
- 然而,改了之后
- 不仅模板错了,而且七牛云图床上的图片都无法显示了……
- 发现是因为github pages改成了https,但是图床域名的image.rexking6.top还是http,浏览器由于安全策略就不会显示
- 到这里真是后悔莫及,想把所有东西都还原回去
- 尝试了一下,https确实是无法还原回去的
- 所以索性把一切推导重来,最后给我的图床申请SSL证书
升级Node.js
网上常提供的解决方案——“安装Node.js的版本管理器”,在windows是不管用的。
1 | npm install -g n |
windows能用的升级方法是从官网下载新版本的msi,重新安装。但是,这里有几个需要注意的地方:
- 从
添加或删除程序
卸载Node.js是卸载不干净的,导致我白装了一次 C:\Users\{User}\AppData\Roaming\npm
和C:\Users\{User}\AppData\Roaming\npm-cache
同样需要手动删除- 除此之外,需要注意有没有其他环境中也装了Node.js。通过Everything(这货帮了我好多忙),发现我Anaconda3中也装了Node.js,导致我前两步完成之后并且重启多次了,
node -v
同样会给出版本号 - 解决方法是安装新版本的Node.js之后,将其目录加进环境变量
Path
中,且置于Anaconda3之前
升级hexo
一开始,hexo及各个插件的升级通过npm的npm-check-updates
来完成。
1 | npm install -g npm-check-updates |
虽然hexo及各个插件的升级完成,但是后来突然冒出一个想法:“会不会虽然hexo的升级完成了,但是hexo的_config.yml
并没有改动,导致更新的一些变化和新功能会被遗漏掉?”。于是重开了另外一个目录,重新init下,对比了两个目录的_config.yml
,确实存在差异。最后决定在另外一个目录,进行设置。
PS:这里的升级hexo是原本没有重装Node.js的做法。其实在重装Node.js之后,直接安装最新版本的hexo及各个插件就可以了。
设置hexo
列一下hexo新旧版本的设置差异。仍然与之前一样,hexo的配置文件称为“站点配置文件”,Next的配置文件成为“主题配置文件”。
语言
站点配置文件中原本的中文设置需要从
1 | language: zh-Hans |
修改为
1 | language: zh-CN |
Algolia
新版本的Algolia需要把apiKey
加进环境变量:
1 | export HEXO_ALGOLIA_INDEXING_KEY=your apiKey |
博客加密
同样地,安装hexo-blog-encrypt
1 | npm install --save hexo-blog-encrypt |
相比于旧版本,新版本支持很多情况的加密设置:
- 每篇博客单独加密
- 针对
tag
全局加密博客 - 在全局加密下,禁用某些文章的加密
- 针对不同
tag
设置不同的密码 - 在全局加密下,某些文章采用另外设置的密码
之后输入密码失效的问题,通过https解决了。但是目录不显示仍然是个问题。参考Hexo博客文章加密的解决方法。
原因:
加密的时候,
post.content
会变成加密后的串,所以原来的TOC
生成逻辑就会针对加密后的内容。
所以这边我只能把原来的内容存进post.origin
字段。
插件 hexo-blog-encrypt
对文章内容进行加密后,会将原始文章内容保存到字段 origin
中,当生成 TOC
时,我们可以通过 page.origin
来得到原始内容,生成文章目录。
找到文件 themes/next/layout/_macro/sidebar.swig
,编辑如下部分:
1 | <aside class="sidebar"> |
虽然这样加密后的文章未解密之前也可以看到 文章目录
,但是也够用了。
设置Next
列一下Next新旧版本的设置差异。
暗黑模式
新版本增加了暗黑模式。在主题配置文件中:
1 | # Dark Mode |
首页摘录
原本的首页摘录是在主题配置文件中配置的:
1 | auto_excerpt: |
但是新版本的Next已经把这个功能删了,只能通过:
1 | excerpt_description: true |
并且使用<!-- more -->
来分隔。
另外,包括插件hexo-auto-excerpt
也无法使用。于是,只能通过插件hexo-excerpt
来完成自动摘录。但是,它最少也会摘录1行,这样我所有博客的摘录就都是“简介”,无法实现我原本一字不留的效果。于是,去了./node_modules/hexo-excerpt/lib/hexo-excerpt.js
中的两处地方,添加部分代码
1 | if (/<!--\s*more\s*-->/.test(post.content) || post.content.indexOf('<a id="more"></a>') !== -1) { |
这部分试了好久,怎么改都不成功。后面转念一想,它之后应该是有一个逻辑,“如果拿到的post.excerpt
为空的话,将所有内容输出。于是给了...
。
MathJax
与之前类似。
使用
hexo-renderer-kramed
替换hexo-renderer-marked
1
2npm uninstall hexo-renderer-marked --save
npm install hexo-renderer-kramed --save将
./node_modules/hexo-renderer-kramed/lib/renderer.js
中的1
2
3
4function formatText(text) {
// Fit kramed's rule: $$ + \1 + $$
return text.replace(/`\$(.*?)\$`/g, '$$$$$1$$$$');
}修改为:
1
2
3function formatText(text) {
return text;
}停用
hexo-math
,安装hexo-renderer-mathjax
1
2npm uninstall hexo-math --save
npm install hexo-renderer-mathjax --save修改
./node_modules/kramed/lib/rules/nline.js
中的默认转义规则1
2
3
4
5
6
7
8
9// 替换11行
escape: /^\\([\\`*{}\[\]()#$+\-.!_>])/,
//修改为
escape: /^\\([`*\[\]()# +\-.!_>])/,
//替换20行
em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
//修改为
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,开启MathJax
在主题配置文件中加入以下代码:
1
2
3
4mathjax:
enable: true
perpage: false
cdn: //cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML
备案
新版本支持备案,早发现多好。在主题配置文件中
1 | beian: |
博客字数&阅读时间
安装插件
hexo-symbols-count-time
1
npm install --save hexo-symbols-count-time
在主题配置文件中设置:
1
2
3
4
5
6# Post wordcount display settings
# Dependencies: https://github.com/theme-next/hexo-symbols-count-time
symbols_count_time:
separated_meta: true
item_text_post: false
item_text_total: true
代码块
新版本支持设置多种代码块风格。在主题配置文件中设置:
1 | codeblock: |
返回顶部
新版本支持返回顶部按钮。在主题配置文件中设置:
1 | back2top: |
阅读进度
新版本支持显示阅读进度,在顶部/底部出现亮条表示阅读进度。在主题配置文件中设置:
1 | # Reading progress bar |
书签
新版本支持书签,开启后在左上角出现书签按钮,可以保存阅读进度。在主题配置文件中设置:
1 | # Bookmark Support |
GitHub Follow
新版本支持在右上角直接跳转至GitHub进行Follow。在主题配置文件中设置:
1 | # `Follow me on GitHub` banner in the top-right corner. |
RSS
同样地,安装hexo-generator-feed
1 | npm install hexo-generator-feed |
之后在站点配置文件中配置:
1 | feed: |
参数的含义:
type
:RSS
的类型(atom/rss2
)path
: 文件路径,默认是atom.xml/rss2.xml
limit
: 展示文章的数量,使用0
或则false
代表展示全部hub
:content
: 在RSS
文件中是否包含内容 ,有3个值true/false
默认不填为false
content_limit
: 指定内容的长度作为摘要,仅仅在上面content
设置为false
和没有自定义的描述出现
content_limit_delim
: 上面截取描述的分隔符,截取内容是以指定的这个分隔符作为截取结束的标志.在达到规定的内容长度之前最后出现的这个分隔符之前的内容,,防止从中间截断.
另外,新版本的Next将RSS按钮删除掉了,需要在./themes/next/layout/_partials/sidebar/site-overview.swig
中的\- if theme.site_state
之前加入以下代码:
1 | {% if theme.rss %} |
相关博客
在每篇博客下,根据分类或者标签列出其相关博客。先安装hexo-related-popular-posts
1 | npm install hexo-related-popular-posts --save |
之后,在主题配置文件中设置:
1 | related_posts: |
display_in_home
这里尝试了一下,没发现区别。
图片缩放
先安装
fancybox
1
git clone https://github.com/theme-next/theme-next-fancybox3 themes/next/source/lib/fancybox
在主题配置文件中设置
1
fancybox: true
HTTP->HTTPS
GitHub Pages
在repo中的Settings中的Pages设置:
如果无法勾选,可以先将将其Remove之后再重新Save,再勾选。
七牛云图床
首先,七牛云的SSL证书界面中购买证书:
之后,采用DNS验证,拿到校验信息:
1 | 校验域名:image.rexking6.top |
之后在域名解析(我的是在阿里万网)中,添加主机记录:
之后,通过dig
命令测试一下:
1 | dig _dnsauth.image.rexking6.top TXT |
校验通过之后,拿到证书,有效期一年:
之后,在域名管理中修改为HTTPS:
最后,Typora图片上传的域名也需要修改:
1 | "url": "https://image.rexking6.top" |
其他
其他功能例如评论、聊天、分析和评分等,个人认为与自己一开始写博客的目的不符,就不添加了。
总结
咋说呢,一开始以为是个小问题,越整越大,越整越大。后面心态调整过来了,面对现实呗,一处处地校对调整,博客比之前已经好看很多啦。