Hexo to vuepress
记录一下博客更换过程中踩的一些坑,以及自身暴露出的一点问题。
# 为什么要换Vuepress
最近在写一个简易lisp解释器(https://github.com/MarcusMogg/sicp),需要调一个UI方便把markdown文件转换成对应的网页,过程中发现vuepress挺适合这个需求,因为可以在markdown中写vue(但还是有点坑,想做到可编辑的支持高亮的代码块有点难受,前端菜鸡……)。
后来觉得vuepress挺适合做博客的,风格比hexo modern很多,然后选了一个博客主题https://vuepress-theme-reco.recoluan.com/。
# 踩坑
# 安装
vuepress第一大坑点就是现存三个大版本0 1 2,这才三年……
我选的博客主题还没有适配vuepress2
在安装这个主题的时候被vuerouter坑了,应该是vuepress1的残留问题,文件名设置为中文build的时候会疯狂报错,一开始还以为是版本冲突,无语……
# mathjax支持
vuepress-plugin-mathjax,又是一个看起来很美好的东西,一开始看起来还不错,测试了一下才发现,$
后面跟空格就不行,$$
换行也不想,\begin{align}
、\begin{cases}
这些都不支持。
如果直接在head里面引入mathjax也不太行,和vue的加载机制貌似冲突。
解决思路一个是markdownit插件换markdown-it-ketex,不过ketex有点弱鸡
另一个思路就是改这个插件。
作者用的依赖是mathjax3 beta版,用3.1.4(https://github.com/mathjax/MathJax-src)测试了没有问题,所以把源代码里的依赖换了,然后改tex2html.js,参考https://github.com/mathjax/MathJax-demos-node。
这又引入几个坑点,svg显示没有问题,html格式3.14使用的css控制显示内容,和插件原来的处理逻辑不一样。不想花很多精力在这个上面,所以只能用svg了。
# 插件开发
在插件开发的过程中又发现一个问题,这个应该不能说是vuepress插件开发的问题,而是node的问题。
CommonJS和ES之间的冲突,有点无语,为什么不统一啊……
# 和hexo对比
和hexo相比,vuepress的最大优点应该是使用了vue,原生支持了较多的功能。
但对用户来讲,真的简单了吗?
hexo的核心原理是将文本进行处理,然后直接写到模板上。虽然简单粗暴,但是模板是比较成熟而且简单的工具,很HTML本身是非常接近的,也就是说,我们可以很容易的修改一个主题,就像修改一个普通网页一样。
但是vuepress如果想添加一个插件,或者修改一个主题要复杂的多,你需要了解vuepress本身的流程,还要研究对应的插件和主题,这对于非前端人来说还是很麻烦的,对应的hexo的社区似乎比vuepress活跃这也是一个原因?
如果你只是看中一个主题的话,vuepress还是值得一试的,前提是没踩坑……
# 反思
这次换博客主题差不多花费了我4~6小时的时间,说实话有点坑了。
回过头来看看其实问题并不算复杂,主要是自己进入一个陌生领域之后有点无头苍蝇的感觉。
比如node里面的包引用,试了半天,不如先看阮一峰的总结文章。
比如看mathjax demo的时候,直接拿vuepress-plugin-mathjax的逻辑往里面的套,结果进入错误的示例领域,单纯试来试去能发现什么……
希望下次遇到问题的时候,多考虑考虑下面的内容
- 你要做什么?你要怎么做?
- 使用一个库的时候,先从整体考虑,这个库的工作逻辑是什么,引入当前项目的代价是什么。
- 遇到未知问题的时候,搞清楚问题的来源,不要东一戳西一戳。计算机没有玄学。
# 一些参考
vuepress-theme-reco (opens new window)
vuepress-plugin-mathjax (opens new window)