ming's blog
Hexo博客搭建填坑记录三

许久未更新博客主要是自己随便做做笔记比较快速,不需要考虑排版问题。最近突然想把之前整理的笔记都放进去,看起来比较美观也方便,就掏出来用了,结果发现一大堆问题,只好重新装修了一下。

这次大概解决的问题如下,我会挑一些重点来细讲:

  • 修改博客评论插件,之前的因为中国网络审核的原因被屏蔽了
  • 修改图床为腾讯云存储桶,之前的图床CDN因为中国网络审核的原因被屏蔽了
  • 修改资源CDN调用,之前的CDN因为中国网络审核的原因被屏蔽了
  • 由于浏览器内核升级导致vue2中部分方法过时失效,故将vue2升级到了vue3
  • 检查出博文代码中的 { 与vue标记语言冲突导致的页面渲染bug
  • 将之前使用的代码插件从highlight.js更换为prismjs,换了新的样式
  • 修复左侧导航栏的一处链接BUG
  • 为首页文章列表增加显示标签,并修改样式
  • 修复博客之前错误的国际化(i18n)使用,并增加部分内容
  • 解决了在mac中使用nodejs引发的hexo渲染错误
  • 解决了safari上不支持的日期格式引发的显示错误
  • 增加了新的博文、更新了关于页面内容、微调部分样式

先说说最令我头疼的mac下使用nodejs的问题

一开始我安装的nodejs最新的稳定版,使用hexo去生成静态文件,一会给我报一个权限不足的问题,一会又给我报一个无法解析ejs。那我就去改文件夹权限、重装package.json里的包嘛,但是问题仍然存在。这个问题一上来就摆在我面前,折磨了我好几天,我甚至一度准备放弃继续使用hexo。

后来我在网上看到有人也遇到这个问题,他说是nodejs在mac上存在问题,需要将nodejs版本降到12。

好了,我降到12后,上述两个问题确实不发生了,但是又出现了新的问题:

FATAL {
  err: [Error: EISDIR: illegal operation on a directory, open '/home/***'] {
    errno: -21,
    code: 'EISDIR',
    syscall: 'open',
    path: '/home/***'
  }
} Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html

这个问题并不是不能解决,只是解决办法和我的需求冲突,但最后我还是妥协了,没有其他办法了,甚至连hexo的官方issue里都没给出第二种解决办法。

解决办法是将 _config.yaml 文件里的 post_asset_folder 设置为 false,即可解决,但同时 hexo 也不再为文章生成资源文件夹。

本来我是挺想为博文的资源文件做一份备份的,但是现在不得不放弃这个想法了,以后博文的内容我尽量用文字的方式记录吧。

在解决这个问题的同时,这个解决办法也为我解决了另外一个问题,所以也算是一石二鸟了,下面来说一说。

博客各种CDN故障、云评论仓库被封锁

因为是在线静态博客,以轻量化为主,所以所有的包用的都是在线的CDN链接,包括之前使用的图床、评论插件、以及开发用的包都是。

其中最常用的就是图床了,为了免费和访问速度,之前一直都是用GitHub仓库做云存储,然后用jsdelivr做免费的CDN加载(直接访问仓库文件会非常慢),但现在因为网络审核的缘故,匿名的jsdelivr已被中国封了,我只好更换图床了。

我选择使用的是腾讯云的COS服务,需要付费,但价格比较便宜。我购买的10G 2年的使用权,总共不到20块钱,这就是上一节提到的“一石二鸟”,不仅解决了存储问题,也解决了CDN的问题。

开发用的包这个太好解决了,遍地都有免费CDN提供,直接更换就好。而评论插件这边,又是一顿折腾,哎。

更改评论插件

我这一次打开博客的第一反应就是,之前小伙伴们给我的评论都没有了,我起初还是挺蒙的,但这个问题并不是首先要解决的,所以稍微往后放了放。

后来我在检查Valine这个评论插件的时候,发现其版本更新导致很多过时功能都无法使用了,于是我就改嘛,捣鼓了好长时间都改好了,但进页面看还是没有。

偶然间我在issue中看到有其他人也遇到这个问题,这个问题是因为国内审核要求禁止评论使用国际服域名,这下就破案了,以前为了不花钱买域名,使用的国际服LeanCloud,这个是Valine的云数据库。看样子现在强制使用国内备案域名了,想继续使用国际服必须配置好Valine的serverURLs参数。

看到这我立马就去配置了serverURLs,但是问题并没有解决。我确实看到请求的数据已经发来,但不知为什么就是绑定不到页面上去,折腾了很久,我决定弃坑了,想着要是Valine以后继续更新,每次更新都得这么大费周章的重新配置,甚至以后还可能强制要求备案域名,我为啥不使用更加成熟的方案呢。

于是我更换了韩国的来必力,配置及其简单,只需注册账户然后将嵌入代码贴到你需要的地方就行,相当的省心。

hexo渲染错误

上述问题都解决完后,博客就可以正常使用了,于是我加了几篇博文。在使用 hexo g 渲染后发现,渲染过程正常、文件也正常,但就是页面空白,什么也没有,当时问题处理到这已经头脑发热了,不知道又是哪出了问题。

即使现在去回忆处理问题的过程,我也记不清了。当时一点点排查问题,最后发现是因为博文中引用的代码使用了 { 标记,而这个vue使用的也是这个标记,所以网页渲染就出现了问题,具体解决办法我现在也没有,毕竟我也不是专业的前端工程师,我现在已将博文中出现的 { 替换为 [ ,反方向的括号同理,共计两处更改。

移动端浏览器上不显示博客运行时间,显示为NaN

最后值得一提的就是这个问题,一开始我以为是手机浏览器屏蔽了js脚本,于是我把Safari高级设置里的选项都开了,结果还是这个问题。

然后我在脚本中加 console.info() 慢慢调试,发现从 new Date() 那里拿来的值就已经是NaN了。

上网一搜才知道,Safari和Chrome对于日期的格式支持不同,修改一下就好了。

// Safari不支持的格式
const date = new Date('2021-08-09');

// Safari支持的格式
const nDate = new Date('2021, 07, 06'); // yyyy, mm, dd
const nDate = new Date(2021, 07, 06, 10, 05, 00); // yyyy, mm, dd, hh, mm, ss
const nDate = new Date(07/06/2021); // mm/dd/yyyy
const nDate = new Date(07/06/2021 10:05:00); // mm/dd/yyyy hh:mm:ss
const nDate = new Date(Tue Jul 06 2021 10:05:00); // Day Mon dd yyyy hh:mm:ss