/
index.html
449 lines (310 loc) · 18.6 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>从 Octopress 迁移到 Hexo | 唐巧的博客</title>
<meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no">
<meta name="author" content="唐巧">
<meta name="description" content="序言我的博客之前一直使用的是 Octopress,不过 Octopress 已经很久没有更新了。而且 Octopress 是基于 Ruby 的,生成博客文章的速度真的是非常非常慢,每次我使用 rake preview 命令时,我的 MacBook 的 CPU 就会狂转。最新的一次我试图在新 MBP 上搭建 Octopress 博客环境失败了,这让我打定主意更换掉它。 之后我调研了一下,最终决定迁移">
<meta property="og:type" content="article">
<meta property="og:title" content="从 Octopress 迁移到 Hexo">
<meta property="og:url" content="https://blog.devtang.com/2016/02/16/from-octopress-to-hexo/index.html">
<meta property="og:site_name" content="唐巧的博客">
<meta property="og:description" content="序言我的博客之前一直使用的是 Octopress,不过 Octopress 已经很久没有更新了。而且 Octopress 是基于 Ruby 的,生成博客文章的速度真的是非常非常慢,每次我使用 rake preview 命令时,我的 MacBook 的 CPU 就会狂转。最新的一次我试图在新 MBP 上搭建 Octopress 博客环境失败了,这让我打定主意更换掉它。 之后我调研了一下,最终决定迁移">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2016-02-16T11:05:46.000Z">
<meta property="article:modified_time" content="2020-02-08T18:08:22.165Z">
<meta property="article:author" content="唐巧">
<meta property="article:tag" content="blog">
<meta name="twitter:card" content="summary">
<link rel="alternative" href="/atom.xml" title="唐巧的博客" type="application/atom+xml">
<link rel="icon" href="/img/favicon.png">
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/%02.css">
<link rel="stylesheet" href="/.css">
<meta name="generator" content="Hexo 4.2.0"></head>
<body>
<header>
<div>
<div id="textlogo">
<h1 class="site-name"><a href="/" title="唐巧的博客">唐巧的博客</a></h1>
<h2 class="blog-motto">记录下自己学习的点滴</h2>
</div>
<div class="navbar"><a class="navbutton navmobile" href="#" title="菜单">
</a></div>
<nav class="animated">
<ul>
<ul>
<li><a href="/">首页</a></li>
<li><a href="/archives">归档</a></li>
<li><a href="/about">关于</a></li>
<li>
<form class="search" action="//google.com/search" method="get" accept-charset="utf-8">
<label>Search</label>
<input type="search" id="search" name="q" autocomplete="off" maxlength="20" placeholder="搜索" />
<input type="hidden" name="q" value="site:blog.devtang.com">
</form>
</li>
</ul>
</nav>
</div>
</header>
<div id="container">
<div id="main" class="post" itemscope itemprop="blogPost">
<article itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2016/02/16/from-octopress-to-hexo/" title="从 Octopress 迁移到 Hexo" itemprop="url">从 Octopress 迁移到 Hexo</a>
</h1>
<p class="article-time">
<time datetime="2016-02-16T11:05:46.000Z" itemprop="datePublished"> 发表于 2016-02-16 11:05</time>
</p>
</header>
<div class="article-content">
<div id="toc" class="toc-article">
<strong class="toc-title">文章目录</strong>
<ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#序言"><span class="toc-number">1.</span> <span class="toc-text">序言</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#安装-Hexo"><span class="toc-number">2.</span> <span class="toc-text">安装 Hexo</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#创建一个新的博客"><span class="toc-number">3.</span> <span class="toc-text">创建一个新的博客</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#迁移和配置"><span class="toc-number">4.</span> <span class="toc-text">迁移和配置</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#修改界面"><span class="toc-number">5.</span> <span class="toc-text">修改界面</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#发布文章"><span class="toc-number">6.</span> <span class="toc-text">发布文章</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#总结"><span class="toc-number">7.</span> <span class="toc-text">总结</span></a></li></ol>
</div>
<h2 id="序言"><a href="#序言" class="headerlink" title="序言"></a>序言</h2><p>我的博客之前一直使用的是 <a href="http://octopress.org/" target="_blank" rel="noopener">Octopress</a>,不过 Octopress 已经很久没有更新了。而且 Octopress 是基于 Ruby 的,生成博客文章的速度真的是非常非常慢,每次我使用 <code>rake preview</code> 命令时,我的 MacBook 的 CPU 就会狂转。最新的一次我试图在新 MBP 上搭建 Octopress 博客环境失败了,这让我打定主意更换掉它。</p>
<p>之后我调研了一下,最终决定迁移到 Hexo,主要的原因是:</p>
<ul>
<li>Hexo 的原理和 Octopress 一样,都是生成静态文件,这样可以方便地托管到 GitHub 和 GitCafe 上。</li>
<li>Hexo 是基于 Node 的,而 Node 的速度非常快。</li>
<li>Hexo 对 Octopress 的迁移很友好,图片引用方式完全一样,所以我的博客文章不需要做什么改动。</li>
</ul>
<p>迁移本来应该在春节前就做完的,不过我在选择 Hexo 的主题上犯难了,Hexo 自带的主题丑极了,而我试了将近 10 个主题,都不满意。最终,我发现了 <a href="http://swift.gg/" target="_blank" rel="noopener">SwiftGG</a> 使用的主题 <a href="https://github.com/wuchong/jacman" target="_blank" rel="noopener">Jacman</a>,于是决定就它了!</p>
<p>整个迁移过程大概如下:</p>
<h2 id="安装-Hexo"><a href="#安装-Hexo" class="headerlink" title="安装 Hexo"></a>安装 Hexo</h2><p>首先使用如下命令安装 Hexo:</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">npm install -g hexo-cli</span><br></pre></td></tr></table></figure>
<h2 id="创建一个新的博客"><a href="#创建一个新的博客" class="headerlink" title="创建一个新的博客"></a>创建一个新的博客</h2><p>接着我们创建一个新的博客目录:</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ hexo init <folder></span><br><span class="line">$ cd <folder></span><br><span class="line">$ npm install</span><br></pre></td></tr></table></figure>
<p>以上命令完成后,会在目标目录生成以下的目录结构:</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">.</span><br><span class="line">├── _config.yml</span><br><span class="line">├── package.json</span><br><span class="line">├── scaffolds</span><br><span class="line">├── source</span><br><span class="line">| ├── _drafts</span><br><span class="line">| └── _posts</span><br><span class="line">└── themes</span><br></pre></td></tr></table></figure>
<p>相比 Octopress,Hexo 的目录结构更加简单:</p>
<ul>
<li>_config.yml 是博客的配置文件。</li>
<li>scaffolds 是博客文章模板。</li>
<li>source 是博客文章目录。</li>
<li>themes 存放主题风格文件。</li>
</ul>
<h2 id="迁移和配置"><a href="#迁移和配置" class="headerlink" title="迁移和配置"></a>迁移和配置</h2><p>迁移起来还是很方便,把以前 Octopress 的 <code>source/_post</code> 目录下的文章,拷贝到 Hexo 的同名目录下即可。</p>
<p>以前的图片目录,也可以直接拷贝到 <code>source/images</code> 目录下。</p>
<p>Google 统计相关的设置可以在 jacman 的 _config.yml 文件中配置。我以前用的评论系统太旧了,这次正好换成了<a href="http://tangqiaoboy.duoshuo.com/" target="_blank" rel="noopener">多说</a>,同样也是在 jacman 的配置文件中设置。</p>
<h2 id="修改界面"><a href="#修改界面" class="headerlink" title="修改界面"></a>修改界面</h2><p>选择 Hexo 的另一个原因就是它的结构很简单,比较方便我定制。我在迁移完博客文章后,对 jacman 主题进行了一些定制。删掉了底部的作者介绍,然后在右侧边栏加上了我的微信公众号介绍。如果你想看看我是如何定制的,可以直接查看我 Fork 出来的 jacman 项目上的 Commits 即可,项目地址在 <a href="https://github.com/tangqiaoboy/jacman" target="_blank" rel="noopener">这里</a>。</p>
<h2 id="发布文章"><a href="#发布文章" class="headerlink" title="发布文章"></a>发布文章</h2><p>Hexo 支持直接发布到 GitHub,不过我在配置好 <code>_config.yml</code> 文件后,执行 <code>Hexo deploy</code> 一直失败!Hexo 一直卡在生成页面过程中,没有任何报错,这使得我也不知道如何修复它。</p>
<p>最终,我自己写了一个小脚本来做发布工作:</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">#! /bin/zsh</span><br><span class="line"></span><br><span class="line">hexo clean</span><br><span class="line">hexo generate</span><br><span class="line">cd public</span><br><span class="line"></span><br><span class="line">git init</span><br><span class="line">git add .</span><br><span class="line">git commit -m "update at `date` "</span><br><span class="line"></span><br><span class="line">git remote add origin git@github.com:tangqiaoboy/tangqiaoboy.github.com.git >> /dev/null 2>&1</span><br><span class="line">echo "### Pushing to Github..."</span><br><span class="line">git push origin master -f</span><br><span class="line">echo "### Done"</span><br><span class="line"></span><br><span class="line">git remote add gitcafe git@gitcafe.com:tangqiaoboy/tangqiaoboy.git >> /dev/null 2>&1</span><br><span class="line">echo "### Pushing to GitCafe..."</span><br><span class="line">git push gitcafe master:gitcafe-pages -f</span><br><span class="line">echo "### Done"</span><br></pre></td></tr></table></figure>
<p>如果你遇到了和我一样问题的话,把以上脚本稍做修改应该也能很好地工作。</p>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>Octopress 已经过时,建议有时间的朋友都可以尝试替换掉它。Hexo 算不上完美,但还算是一个不错的替代方案。</p>
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
<div class="article-categories">
<span></span>
<a class="article-category-link" href="/categories/shell/">shell</a>
</div>
<div class="article-tags">
<span></span> <a href="/tags/blog/">blog</a>
</div>
</div>
<div class="article-share" id="share">
<div data-url="https://blog.devtang.com/2016/02/16/from-octopress-to-hexo/" data-title="从 Octopress 迁移到 Hexo | 唐巧的博客" data-tsina="" class="share clearfix">
</div>
</div>
</footer>
</article>
<nav class="article-nav clearfix">
<div class="prev" >
<a href="/2016/02/27/swift-gym-1-nested-optional/" title="Swift 烧脑体操(一) - Optional 的嵌套">
<strong>上一篇:</strong><br/>
<span>
Swift 烧脑体操(一) - Optional 的嵌套</span>
</a>
</div>
<div class="next">
<a href="/2016/02/16/inspired-summary/" title="人员、流程和产品上的思考 - 读《启示录》总结">
<strong>下一篇:</strong><br/>
<span>人员、流程和产品上的思考 - 读《启示录》总结
</span>
</a>
</div>
</nav>
</div>
<div class="openaside"><a class="navbutton" href="#" title="显示侧边栏"></a></div>
<div id="asidepart">
<div class="closeaside"><a class="closebutton" href="#" title="隐藏侧边栏"></a></div>
<aside class="clearfix">
<div class="sponsor">
</div>
<div class="categorieslist">
<p class="asidetitle">分类</p>
<ul>
<li><a href="/categories/books-summary/" title="books summary">books summary</a></li>
<li><a href="/categories/iOS/" title="iOS">iOS</a></li>
<li><a href="/categories/iOS-weekly/" title="iOS weekly">iOS weekly</a></li>
<li><a href="/categories/mac/" title="mac">mac</a></li>
<li><a href="/categories/shell/" title="shell">shell</a></li>
<li><a href="/categories/summary/" title="summary">summary</a></li>
</ul>
</div>
<div class="weixin">
<br />
<p class="asidetitle">微信公众号</p>
<p>关注我的微信公众号,和我一起成长:</p>
<img src="/images/weixin-qr.jpg" width="230px" />
</div>
<div class="rsspart">
<a href="/atom.xml" target="_blank" title="rss">RSS 订阅</a>
</div>
</aside>
</div>
</div>
<footer><div id="footer" >
<div class="social-font" class="clearfix">
</div>
<p class="copyright" style="margin-top: 10px;">
Powered by <a href="http://hexo.io" target="_blank" title="hexo">hexo</a> and Theme by <a href="https://github.com/wuchong/jacman" target="_blank" title="Jacman">Jacman</a> © 2020
<a href="/about" target="_blank" title="唐巧">唐巧</a>
</p>
</div>
</footer>
<script src="/js/jquery-2.0.3.min.js"></script>
<script src="/js/jquery.imagesloaded.min.js"></script>
<script src="/js/gallery.js"></script>
<script src="/js/jquery.qrcode-0.12.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.navbar').click(function(){
$('header nav').toggleClass('shownav');
});
var myWidth = 0;
function getSize(){
if( typeof( window.innerWidth ) == 'number' ) {
myWidth = window.innerWidth;
} else if( document.documentElement && document.documentElement.clientWidth) {
myWidth = document.documentElement.clientWidth;
};
};
var m = $('#main'),
a = $('#asidepart'),
c = $('.closeaside'),
o = $('.openaside');
c.click(function(){
a.addClass('fadeOut').css('display', 'none');
o.css('display', 'block').addClass('fadeIn');
m.addClass('moveMain');
});
o.click(function(){
o.css('display', 'none').removeClass('beforeFadeIn');
a.css('display', 'block').removeClass('fadeOut').addClass('fadeIn');
m.removeClass('moveMain');
});
$(window).scroll(function(){
o.css("top",Math.max(80,260-$(this).scrollTop()));
});
$(window).resize(function(){
getSize();
if (myWidth >= 1024) {
$('header nav').removeClass('shownav');
}else{
m.removeClass('moveMain');
a.css('display', 'block').removeClass('fadeOut');
o.css('display', 'none');
}
});
});
</script>
<script type="text/javascript">
$(document).ready(function(){
var ai = $('.article-content>iframe'),
ae = $('.article-content>embed'),
t = $('#toc'),
ta = $('#toc.toc-aside'),
o = $('.openaside'),
c = $('.closeaside');
if(ai.length>0){
ai.wrap('<div class="video-container" />');
};
if(ae.length>0){
ae.wrap('<div class="video-container" />');
};
c.click(function(){
ta.css('display', 'block').addClass('fadeIn');
});
o.click(function(){
ta.css('display', 'none');
});
$(window).scroll(function(){
ta.css("top",Math.max(140,320-$(this).scrollTop()));
});
});
</script>
<script type="text/javascript">
$(document).ready(function(){
var $this = $('.share'),
url = $this.attr('data-url'),
encodedUrl = encodeURIComponent(url),
title = $this.attr('data-title'),
tsina = $this.attr('data-tsina'),
description = $this.attr('description');
var html = [
'<div class="hoverqrcode clearfix"></div>',
'<a class="overlay" id="qrcode"></a>',
'<a href="https://www.facebook.com/sharer.php?u=' + encodedUrl + '" class="article-share-facebook" target="_blank" title="Facebook"></a>',
'<a href="https://twitter.com/intent/tweet?url=' + encodedUrl + '" class="article-share-twitter" target="_blank" title="Twitter"></a>',
'<a href="#qrcode" class="article-share-qrcode" title="微信"></a>',
'<a href="http://widget.renren.com/dialog/share?resourceUrl=' + encodedUrl + '&srcUrl=' + encodedUrl + '&title=' + title +'" class="article-share-renren" target="_blank" title="人人"></a>',
'<a href="http://service.weibo.com/share/share.php?title='+title+'&url='+encodedUrl +'&ralateUid='+ tsina +'&searchPic=true&style=number' +'" class="article-share-weibo" target="_blank" title="微博"></a>',
'<span title="Share to"></span>'
].join('');
$this.append(html);
$('.hoverqrcode').hide();
var myWidth = 0;
function updatehoverqrcode(){
if( typeof( window.innerWidth ) == 'number' ) {
myWidth = window.innerWidth;
} else if( document.documentElement && document.documentElement.clientWidth) {
myWidth = document.documentElement.clientWidth;
};
var qrsize = myWidth > 1024 ? 200:100;
var options = {render: 'image', size: qrsize, fill: '#2ca6cb', text: url, radius: 0.5, quiet: 1};
var p = $('.article-share-qrcode').position();
$('.hoverqrcode').empty().css('width', qrsize).css('height', qrsize)
.css('left', p.left-qrsize/2+20).css('top', p.top-qrsize-10)
.qrcode(options);
};
$(window).resize(function(){
$('.hoverqrcode').hide();
});
$('.article-share-qrcode').click(function(){
updatehoverqrcode();
$('.hoverqrcode').toggle();
});
$('.article-share-qrcode').hover(function(){}, function(){
$('.hoverqrcode').hide();
});
});
</script>
<!-- Analytics Begin -->
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-28029597-1', '');
ga('send', 'pageview');
</script>
<!-- Analytics End -->
<!-- Totop Begin -->
<div id="totop">
<a title="返回顶部"><img src="/img/scrollup.png"/></a>
</div>
<script src="/js/totop.js"></script>
<!-- Totop End -->
<!-- MathJax Begin -->
<!-- mathjax config similar to math.stackexchange -->
<!-- MathJax End -->
<!-- Tiny_search Begin -->
<!-- Tiny_search End -->
</body>
</html>