测试更新流程&&遇到的一些问题

这是一篇测试本博客可用性的文章,顺便列举一些我遇到的问题。

果然我还是太菜了,费了好多时间才搞定博客。以前遇到的好多hexo的问题现在没有了,现在主要就一个:图片的使用。这真是上古难题,从我开始用hexo到现在一直都有,让我严重怀疑是因为我没有正确使用hexo。

图片路径问题

我平时用typora,想要让我的笔记等md文件包括工作目录结构可以不经任何修改就发布到hexo。我的图片一般都保存在当前md文件所在位置的images目录,也就是当前位置的所有md文件引用的图片都在同一个images文件夹里面。网上好多图片相关的解决方案都是用的post_asset_folder,这些都不符合我的要求啊。这一次,我发现只要我md里的图片路径前面多一个slash,也就是从images/xxx.jpg改成/images/xxx.jpg就可以让hexo把图片路径都指向网站根目录的images文件夹,那就好办了!写一个hexo filter插件放在scripts目录里让它把所有路径都添加一个slash,然后部署脚本里把images文件夹复制到public/images。最后的复制过程应该也可以用hexo插件解决,目前没空搞了,又不是不能用~233333

1
2
3
4
5
6
7
'use strict';

hexo.extend.filter.register('before_post_render', function(data) {
data.content = data.content.replace(/\!\[[\w ]*\]\((?!http|https|\.\/|\.\.\/|\/)/g, '$&/');
console.log('image path!');
return data;
});

插件问题

hexo-uglify这个插件的readme文档里的option不能直接复制到_config.yml里就不管了,里面的outputcompress两个不能为空,至少必须设置为{},这也是这个插件的默认设置。如果留空,会导致插件出错而不能uglify。花了我好多时间搞这个,最后发现是被readme文档误导了。。。

MathJax

现在mathjax支持公式标号了,很好,但是会引来另一个渲染问题。简单来说,就是使用\begin{equation}...\end{equation}时,由于有标号,mathjax为了避免渲染出来的公式和标号重叠,就对公式的container设置了一个min-width,这个浏览器开F12就可以发现了。但是这个min-width会导致一些长公式在手机端显示溢出,页面会变得很丑。issue里有折中解决办法,但我不想那样做。既然是标号问题,那就使用\begin{equation*}...\end{equation*},这样公式就没有标号了,目前对我来说够用了。需要标号时就只能不使用equation环境咯。两者对比详见我的test页面。

Github Action脚本问题

这个遇到了好多,主要原因还是对action不熟悉,对Linux也不够熟悉。

  1. ad-m/github-push-action进行push操作的话,actions/checkout必须使用persist-credentials: false,不懂,看到前者的issue里说是后者的bug,反正跟着做就对了。不过这样会导致clone下来的项目有些git操作进行不了。

  2. 我用的ubuntu-lastest,apt install的pandoc版本太低了,使用hexo-renderer-pandoc会出错,需要自己下载最新版的pandoc,貌似2.0以上就可以了。

  3. Linux的mv命令,mv src dest默认是mv src/* -T dest,如果dest是个目录又不存在而src里正好只有一个文件,这时就会导致这个文件被重命名成dest,改成mv src/* -t dest就可以了。

  4. 需要使用通配符时,比如rm -rf !(.|..|xxx)可能需要shopt -s extglob,一开始在本地可以正常跑,到GitHub就出问题,后来发现是缺这个。

  5. GitHub action可以像下面这样,实现手动执行workflow。

1
2
3
on:
watch:
type: [started]

差不多就以上这些比较重要吧,GitHub action真心爽,有点像配置docker。现在我的流程是博客内容放在私有仓库的master分支,这里只有md文件和它们引用的资源,博客的hexo配置放在另一个分支。博客内容更新后,自动按照hexo配置构建好,再推到公开的仓库。本地只需要一个git环境,其他都不用了,甚至git也不用,只要有一个浏览器可以访问GitHub,在网页上写就可以了!如果整个流程没出错,现在你就可以看到这篇文章了。

就酱~该好好学习了,疫情期间在家懒到不行。