New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

博客从wordpress迁到hexo #2

Open
8788 opened this Issue Nov 14, 2018 · 0 comments

Comments

Projects
None yet
1 participant
@8788
Copy link
Owner

8788 commented Nov 14, 2018

历史文章,发布于2014年,现迁移到issues

用wordpress很长一段时间了,尽管wp很成熟,插件也比较多,功能也应有尽有。但是每次写东西的时候,都要经历一个繁琐的过程,很是让人不爽。之前的流程是这样:

markdown编写内容 --> 插件导出html --> 粘贴到wp后台 --> 发布

当想修改文章的时候,又得重新来一遍。终于还是受不了了,于是抽出了几天时间了解了 hexo,觉得挺好用的,而且可以直接托管在github,连虚拟主机的费用都省了。而且hexo从写到发布流程也比较简单,只需两条命令就可以完成发布流程:

hexo g --> hexo d

迁到hexo的同时,也更换了新的域名,旧的文章后期会选择性的迁过来一些。

hexo的使用

对于第一次接触hexo的用户来说,还是需要花点时间来了解下的,我是参考了下面的两篇文章,介绍的非常详细,所以对这里就不赘述了。

hexo你的博客
hexo系列教程

hexo主题

hexo主题是这次迁移博客花的时间最多的地方,https://github.com/tommy351/hexo/wiki/Themes,官方虽然也列出来了不少主题,大致看了一遍都不是太喜欢。于是就在hexo-theme-strict的基础上进行了修改,也就是现在用的这个主题,等以后对hexo熟悉之后再考虑自己开发一个主题。

这次主要对strict主题进行了以下修改:

  1. 增加了对IE7的兼容
  2. 将布局改为两栏式
  3. 增加了部分widget(about/categories/links)
  4. 使用多说作为默认评论组件,hexo-diy-strict/_config.yml中填写多说的short_name
  5. 其它细节处的样式调整

首页风格如下图:

hexo-diy-strict

修改后的主题源码也放到了github上,喜欢的可以下载下来使用,具体使用方法可参考说明

https://github.com/8788/hexo-diy-strict

让html页面不被render

我们知道要想在博客的根目录添加资源(图片、html等),只需将对应的文件放在source目录下即可。但是经过测试发现,当把.html文件放在source目录下时,hexo也会把它当成.md文件去渲染。官方给出的方案是在html文件头部加上:

layout: false
---

很显然,如果页面过多的话,会比较坑。目前还没发现比较好的方案,于是尝试修改hexo的源码。在node安装目录\node_modules\hexo\lib\plugins\generator下有个page.js文件(ps: 测试的系统是win7 64位,hexo版本2.5.2),找到以下代码:

if (!layout || layout === 'false'){
  route.set(item.path, function(fn){
    fn(null, item.content);
  });
} else {
  render(item.path, [layout, 'page', 'post', 'index'], item);
}

将其修改为:

var notRender = ['test1', 'test2']; // 设置不被render的目录
var dir = path.substring(0, path.indexOf('/'));

if (!layout || layout === 'false' || notRender.indexOf(dir) > -1){
  route.set(item.path, function(fn){
    fn(null, item.content);
  });
} else {
  render(item.path, [layout, 'page', 'post', 'index'], item);
}

notRender中的test1, test2目录即为不需要被render的目录,保存后,重新执行hexo g命令就会发现source中的test1test2目录下的html文件没有被render。

另外感谢@xzper 和 @熙和 补充的通过hexo-processor-copyassets插件来解决的方案,详情请参考:

https://github.com/f111fei/hexo-processor-copyassets

@8788 8788 added the 2014 label Nov 14, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment