坚持更新这个博客网站居然也有五年了,虽然产量不是很高但也没有完全中断过。从一开始就是用 Jekyll 搭建并布署在 Github Pages 上,最早用了 bootstrap 的主题,中途曾经尝试切换到 Hexo,但没多久又切回了 Jekyll,后来发现了一款 scribble 的简洁主题就一直沿用至今,后面就没再怎么折腾过切换其它建站方案和主题。
直到最近,听说了 Gatsby 并进行了一些尝试,又让我有了折腾的冲动。主要是 Gatsby 是用 React 实现的,而我这两年都在写 React,Gatsby 让我可以掌控每个细节。
Gatsby 的 tutorial 写得很详细,照着一步一步操作,很快就能把一个博客网站搭建起来,原本我是想把新的网站也放到 Github Pages 上,覆盖用 Jekyll 搭建的网站,但是发现一个问题,因为之前我把一些博客文章的链接分享了出去,因此我要保证新的网站生成的文章链接,文章内的图片等链接也和旧的网站保持一致,但是做不到。
比如当前文章 2018-12-08-migrate-to-gatsby.md
在 Jekyll 下生成的路由是 /2018/12/08/migrate-to-gatsby.html
,而在 Gatsby 下,我最多能保证生成 /2018/12/08/migrate-to-gatsby/
,而这两者实际是不一样的地址。
(2019/07/29 update: 上面这句话后来发现并不正确,reactjs 的官网也是用 gatsby 构建的,但它生成的网页地址却是 .html 后缀的,如 https://reactjs.org/tutorial/tutorial.html ,查看源码,发现它把 tutorial/tutorial.md 的 permalink 设置为了 tutorial/tutorial.html ,恍然大悟,我也可以在 onCreateNode 方法中将 slug 设置为 xxx.html ,待实验。)
因此我决定把新的博客网站布署到其它地方,旧网站继续保持,以避免以前分享到外部的链接失效,以后新的博客文章可能只发表在新网站上,旧网站不再更新。
除了生成的文章链接问题,Jekyll 和 Gatsby 还有些其它不同的地方:
date: "2018-12-08"
因此迁移的时候,需要做一些额外的操作:
鉴于文章数量有点多,手动操作了几篇后,效率有点低,因此写了一个 migrate.sh 的迁移脚本:
# migrate.sh, run in macOS
md_files=$(ls *.md)
for file in $md_files
do
echo $file
folder=$(echo $file | awk '{print substr($1, 1, 10)}')
echo $folder
sed -i .bak "/^layout:/d" $file
sed -i .bak "/^description:/d" $file
sed -i .bak "/^category:/d" $file
sed -i .bak "/^date:/d" $file
sed -i .bak "2a\\
date: \"${folder}\"
" $file
mkdir $folder
cp $file $folder
done
rm *.bak
rm *.md
另外,新网站代码块的样式是直接从旧网站拷贝过去了。
新的网站 (by Gatsby):
旧网站 (by Jekyll):