本博客使用 hexo 搭建,主题为 next,这也是国内博客现在比较常见的选择。以前已用 jekyll 搭建好了个博客,但看到网上有人说 hexo 是直接把静态资源推到 gh-pages上的,渲染更快等等,另外界面简洁许多。果断抛弃原项目,重搭了个 hexo 博客。
具体怎样部署博客就不多讲了,这里罗列下搭建本博客对原 hexo 以及 next 主题的一些细小改动。
这些改动主要是为了满足个人的一些功能需求,比如说,我需要点击图片能放大,我需要更符合 markdown 语法的注脚插件等等。其他人或许也有相似需求,简单讲下思路,没准能有启发作用。
修改 next 主题,使用 fancybox,点击时加载原始大图。
我博客里的图片都是保存在阿里云OSS上的,为了排版以及减少流量消耗,md文件中的图片名都有后缀来做自动图片缩放处理。
点击查看原始大图是多数网站很自然的一个功能,但在 hexo 博客里,即使使用 fancybox[1] 这种插件,也只会使打开图片的效果更 fancy 一点,并不会自动解析图片 url 把图片处理的后缀给去掉,于是这里就只好自己动手了。
例如下面两个 url,前一个是增加了阿里云OSS自动缩放的,后一个是原始图,也是我们在展示大图时期望的 url。
https://benzgallery.oss-cn-shanghai.aliyuncs.com/style25.png?x-oss-process=style/resize_w200h100_center_crop
https://benzgallery.oss-cn-shanghai.aliyuncs.com/style25.png
OK,那就是把 ?x-oss-process
以及之后的字符串通过正则的方式匹配再去掉就行。
接下来,从 fancybox 以及使用它的 next 主题的源代码找到相关地方,搞清楚,fancybox 是怎么调用生效、哪里是渲染原文图片的链接,哪里是渲染fancybox展示大图的链接。
这里不赘述所有修改地方,主要是按照自己的需求修改以下代码里的 imageLink 满足自己要求就行。
在我这里,其中 replace_from 为 /(\?x-oss-process=style\S+)/
,replace_to 为 ""
,从而实现正则替换的效果。replace_from,replace_to 是自己增加的参数,从 themes\next_config.yml 传递过来。
1 | # themes\next\source\js\utils.js |
具体修改参考 : https://github.com/BenZstory/hexo-theme-next/commit/784beb7424d2693d01728a99c6ab7d061e4db7a2
hexo 增加脚本,对 md 中部分元素内容禁止渲染,从而真正隐藏该部分文本
这里借用 html 元素格式,因为网页碰到没见过的 html 元素会跳过不渲染,仿佛没存在过一样,而加上了博客脚本,会在部署渲染时完全删掉该部分内容,用起来很舒服。
例如使用一对 <hidden></hidden>
作为元素标签,在 hexo_root\scripts\hide.js
添加脚本如下:
1 | hexo.extend.filter.register('before_post_render', function(data) { |
渲染数学公式
使用 Hexo + Next 的默认渲染引擎即可,不必修改渲染引擎等,Next 主题已经附带了 mathjax 插件,Latex行内行外公式都能正常渲染,只是要注意开启方法:
next 主题文件夹下 _config.yml 配置中 enable 设为 true。并根据 pere_page 的注释正确配置,即,如果 per_page 设置为 false,每个页面都默认开启公式渲染;或者使用原默认参数 true,然后在每个用到公式的md的 Front-matter 增加 mathjax: true
配置项。
注脚
试了很多注脚插件都不太爽,要么完全渲染有问题,要么支持的语法不够灵活。
因此我在 hexo-reference 的基础上又改了一版,从原来只支持数字标记的注脚变为更符合常见 markdown 语法的 英文+数字+下滑线
注脚标记,跟我常用的 cmd markdown 编辑器语法统一起来。
已经向原作者提了 pull request。
一般编辑发布流程
个人最佳实践:
使用 cmd markdown 进行编辑、同步。
将编辑好的文章导出为 md 并增加符合 hexo 要求的头格式信息,如title、description等。
将md文件放到 Dropbox 某一文件夹中以做备份和同步,而在hexo项目文件夹中,使用软连接命令将 /source/_posts 目录映射到这个文件夹上。
如果是在 windows 环境下,使用
mklink
命令来进行软连接,具体来说,假设 目标文件夹为dropbox/sync_posts
,执行命令mklink /D hexo_root\source\_posts dropbox\sync_posts
使用 hexo -s 在本地部署网站,检验是否正常。
使用 hexo -d [2]命令将网站推送并部署到预设的 github-pages 项目上。
通过以上过程,把纯净的静态网站部署到对应网站上,而代码和原md文件都没有暴露。
推荐在一个博客项目 git 下建两个分支,一个 master 分支放代码,一个 gh-pages 分支放静态网站给 github 渲染。
Github 项目名随便,在对应 repository 的 Settings - GitHub Pages 中设置好静态页面所用的 branch 就好,然后 github 会提示你网站的 url。如果你有域名的话,将 CNAME 文件丢到 _posts 文件夹中,再在域名提供商做好解析,就大功告成了。