许久前无心发现一个node作的静态博客生成工具——Cabin,感受非常欣喜。其实使用这种静态博客生成工具,十有八九是用在github pages上的,github官方推荐的是jekyll,可是这个是基于ruby,固然这不是重点,重点是在windows上安装jekyll实在太困难。javascript
Cabin的技术栈也比较长,牵扯到Node.js、Python(安装Pygments须要)、Compass(须要ruby运行环境,安装教程)。ruby推荐安装1.9.3版本,不然在XP环境下安装Compass会失败,其余两个环境安装都不会遇到什么困难。css
接着安装Cabin自己,运行java
npm install -g cabin grunt-cli
运行完成以后,你就能够用使用cabin new
命令来建立博客了:node
cabin new blog CabinJS/Candy
其中第一个参数blog
表明博客文件要存放的文件夹路径,这里是在当前命令运行目录下的blog文件夹;而后第二个参数CabinJS/Candy
表明使用的模板,它实际上是github项目地址的缩写,CabinJS
表明github用户名,Candy
表明CabinJS
用户建立的Candy
项目。
运行的时候,会遇到两个须要输入的地方,一个是选择使用的模板引擎,支持jade和ejs两种;一个是选择部署环境,能够选择不使用、github pages、Amazon S三、或者任意一个FTP服务器。而后就是一些列的依赖下载。git
等一些安装好以后运行cd blog
命令进入blog
文件夹,而后运行grunt
命令来执行一系列的编译工做,编译完成以后就会启动本地的测试服务器,而且打开浏览器预览编译的结果。
可是当你预览生成的结果时,却发现网页没法正常的显示,这是里面引用的静态js、css资源都是来源于国外的,在大陆无法访问,因而乎我作了一个适合国内访问的模板。搭建运行cabin new
命令的时候将第二个参数改为yunnysunny/Candy
便可。在这个模板中将社会化组件换成了国内经常使用的多说
,而后就是须要配置一下多说,建立完多说帐号和应用以后,选择刚才建立的应用进入后台管理
,点击左侧工具
菜单,显示的通用代码
就是咱们要改造的对象。
图4.1 多说示例代码
其实这段代码已经被放置在生成博客目录下src/layouts/_social.ejs
下,用文本编辑器打开这个文件:github
<a name="comments"></a> <!-- 多说评论框 start --> <div class="ds-thread" data-thread-key="<%= post.url %>" data-title="<%= post.title %>" data-url="http://blog.whyun.com<%= data.baseUrl %><%= post.url %>"></div> <!-- 多说评论框 end --> <!-- 多说公共JS代码 start (一个网页只需插入一次) --> <script type="text/javascript"> var duoshuoQuery = {short_name:"whyun"};//把这个地方替换成多说帐号 (function() { var ds = document.createElement('script'); ds.type = 'text/javascript';ds.async = true; ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//static.duoshuo.com/embed.js'; ds.charset = 'UTF-8'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ds); })(); </script> <!-- 多说公共JS代码 end -->
代码4.1 模板中的评论部分代码
修改上述代码中的data-url的前缀为你的博客根地址,并把var duoshuoQuery = {short_name:"whyun"}
替换成多说项目的简称,若是不会设置能够直接从多说后台示例代码中拷贝(图4.1中标红部分)。npm
首先看一下安装后的目录结构:
图5.1 cabin目录结构
其中目录posts部分即为markdown存放路径,随便打开里面预置的一个文件,在markdown文件头部会出现以下格式的说明信息:json
{ title: "Markdown Test", date: "2013-08-4", description: "Posting using all supported markdown features" }
代码 5.1文件markdownTest.md头部信息
这个头部声明是必需要写的,不然没法编译经过,其中title
为文章标题,这个会在文章开头的添加一个H1标签,因此在markdown正文中无需再写标题了,不然会在生成的文章中含有两个标题;date为文章发布时间;description为文章简介。windows
官方自带的模板是支持RSS生成的,其实在国内咱们作博客很看重的一点仍是SEO,因此我又在官方的基础上增长了生成了sitemap的功能,因此说生成sitemap的功能必须使用我在前文提到的yunnysunny/Candy
模板。
进入刚才建立的blog
目录,会发现文件Gruntfile.js
,摘录其中一段以下:浏览器
jsonpages: { posts: { src: 'posts', dest: 'dist', layout: 'src/layouts/post.ejs', url: 'posts/:title/', options: { pageSrc: 'src/pages', data: { baseUrl: '/' }, pagination: { postsPerPage: 2, listPage: 'src/pages/index.ejs' } } } }
代码 6.1
在pages属性中添加rss和sitemap的配置便可:
jsonpages: { options: { pageSrc: 'src/pages', rss: { title: '白一梓的我的博客', author:'白一梓', description: 'A blog about tech.', url: 'http://blog.whyun.com' }, sitemap:{ url:'http://blog.whyun.com' } }, posts: { src: 'posts', dest: 'dist', layout: 'src/layouts/post.ejs', url: 'posts/:title/', options: { pageSrc: 'src/pages', data: { baseUrl: '/' }, pagination: { postsPerPage: 2, listPage: 'src/pages/index.ejs' } } } }
代码 6.2
其中rss
和sitemap
中都有一个url
选项,其实都是指当前博客的根路径,有重复之嫌,后期能够考虑优化一下代码。