如果你跟我一样纠结哪里写博,那就来到GitHub吧,让我们一起hexo!Bruce绝对不会让你失望,相信很快hexo就会流行起来。
hexo出自台湾大学生tommy351之手,是一个基于Node.js的静态博客程序,其编译上百篇文字只需要几秒。hexo生成的静态网页可以直接放到GitHub Pages,BAE,SAE等平台上。先看看tommy是如何吐槽Octopress的 →_→ Hexo颯爽登場。
如果你对默认配置满意,只需几个命令便可秒搭一个hexo。
如果你跟我一样喜欢折腾下,30分钟也足够个性化。
如果你过于喜欢折腾,可以折腾个把星期,尽情的玩。
搭建过程你或许觉得有那么点小繁琐,但一旦搭建完成,写文章是极简单,极舒服的。
只需要几个简单命令,你就可以完成一切。
1 | hexo n 写文章 |
下面逐步介绍,进入正题。
环境准备
• 安装Node
到Node.js官网下载相应平台的最新版本,一路安装即可。我用的是node-v0.10.22-x86.msi
• 安装Git
Git的客户端很多,我用的是msysgit,喜欢用绿色版本Portable application for official Git for Windows 1.8.4,下载下来设置一下环境变量即可,Git_HOME,%Git_HOME%\bin之类的,不多说。
• 安装Sublime(可选)
Sublime Text 2在这里仅仅作为一个文本编辑器使用,支持各种编程语言和文件格式,当然也支持Markdown语法,实在是个不可多得的练码奇才。喜欢追鲜的也可以尝试处于beta版本的Sublime Text 3。我用绿色版本Portable Sublime Text 2.0.2.zip。
• GitHub
GitHub账号和GitHub Pages 一般都应该有吧,已有的请自动无视这一部分。
首先注册一个『GitHub』帐号,已有的默认默认请忽略
建立与你用户名对应的仓库,仓库名必须为『your_user_name.github.com』
添加SSH公钥到『Account settings -> SSH Keys -> Add SSH Key』
my GitHub Pages
前两步忽略,只说第三步,添加SSH-Key。
首先设置你的用户名密码:
1 | git config --global user.email "zhangyang.z@icloud.com@qq.com" |
生成密钥:
1 | ssh-keygen -t rsa -C "zhangyang.z@icloud.com@qq.com" |
输入文件路径:
1 | H:\hexo\blog>ssh-keygen -t rsa -C "zhangyang.z@icloud.com@qq.com" |
Generating public/private rsa key pair.
Enter file in which to save the key (//.ssh/id_rsa): H:\git\myssh\ssh
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in H:\git\myssh\ssh.
Your public key has been saved in H:\git\myssh\ssh.pub.
The key fingerprint is:
b0:0c:2e:67:33:ab:c1:50:10:40:0a:ba:c1:80:59:22 zhangyang.z@icloud.com@qq.com
有个bug,文件路径中的盘符H必须大写,否则会报错。
上述命令若执行成功,会在H:\git\myssh目录下生成两个文件id_rsa和id_rsa.pub,最后两步:
用文本编辑器打开ssh.pub文件,拷贝其中的内容,将其添加到Add SSH Key
将id_rsa和id_rsa.pub拷贝至你Git安装目录下的.ssh目录,如H:\PortableGit-1.8.4.ssh
Add SSH Keys
最后可以验证一下:
1 | ssh -T git@github.com |
若有问题,请重新设置。常见错误请参考:
1 | GitHub Help - Generating SSH Keys |
• 安装
Node和Git都安装好后,可执行如下命令安装hexo:
1 | npm install -g hexo |
初始化
然后,执行init命令初始化hexo到你指定的目录:
1 | hexo init <folder> |
也可以cd到目标目录,执行hexo init。
好啦,至此,全部安装工作已经完成!
• 生成静态页面
cd 到你的init目录,执行如下命令,生成静态页面至hexo\public\目录。
1 | hexo generate |
命令必须在init目录下执行,否则不成功,但是也不报错。
当你修改文章Tag或内容,不能正确重新生成内容,可以删除hexo\db.json后重试,还不行就到public目录删除对应的文件,重新生成。
• 部署到github
安装git deploy插件
1 | npm install hexo-deployer-git --save |
站点配置文件
1 | # Deployment |
hexo d
部署上去
• 本地启动
执行如下命令,启动本地服务,进行文章预览调试。
1 | ``` |
1 | 浏览器输入http://localhost:4000就可以看到效果。 |
hexo new [layout] “postName” 新建文章
1 | 其中layout是可选参数,默认值为post。有哪些layout呢,请到scaffolds目录下查看,这些文件名称就是layout名称。当然你可以添加自己的layout,方法就是添加一个文件即可,同时你也可以编辑现有的layout,比如post的layout默认是hexo\scaffolds\post.md |
title: { { title } }
date: { { date } }
tags:
1 | --- |
title: { { title } }
date: { { date } }
categories:
tags:
1 | postName是md文件的名字,同时也出现在你文章的URL中,postName如果包含空格,必须用”将其包围,postName可以为中文。 |
hexo new photo “photoPostName” 新建照片文章
description
markdown文件头中也可以添加description,以覆盖全局配置文件中的description内容,请参考下文_config.yml的介绍。
title: hexo你的博客
date: 2013-11-22 17:11:54
categories: default
tags: [hexo]
description: 你对本页的描述
1 | hexo默认会处理全部markdown和html文件,如果不想让hexo处理你的文件,可以在文件头中加入layout: false。 |
以上是摘要
以下是余下全文
1 | more以上内容即是文章摘要,在主页显示,more以下内容点击『> Read More』链接打开全文才显示。 |
git clone https://github.com/heroicyang/hexo-theme-modernist.git themes/modernist
1 | 目录是否是modernist无所谓,只要与_config.yml文件一致即可。 |
cd themes/modernist
git pull
1 | • 评论框 |
hexo new page “about”
1 | > 在hexo\source\下会生成about目录,里面有个index.md,直接编辑就可以了,然后在主题的_config.yml中将其配置显示出来。 |
常用命令:
hexo new “postName” 新建文章
hexo new page “pageName” 新建页面
hexo generate 生成静态页面至public目录
hexo server 开启预览访问端口(默认端口4000,’ctrl + c’关闭server)
hexo deploy 将.deploy目录部署到GitHub
常用复合命令:
hexo deploy -g
hexo server -g
简写:
hexo n == hexo new
hexo g == hexo generate
hexo s == hexo server
hexo d == hexo deploy
至此,基本操作介绍完毕,以下内容普通用户无需了解。`
• 目录介绍
默认目录结构:
.
├── .deploy
├── public
├── scaffolds
├── scripts
├── source
| ├── _drafts
| └── _posts
├── themes
├── _config.yml
└── package.json
.deploy:执行hexo deploy命令部署到GitHub上的内容目录
public:执行hexo generate命令,输出的静态网页内容目录
scaffolds:layout模板文件目录,其中的md文件可以添加编辑
scripts:扩展脚本目录,这里可以自定义一些javascript脚本
source:文章源码目录,该目录下的markdown和html文件均会被hexo处理。该页面对应repo的根目录,404文件、favicon.ico文件,CNAME文件等都应该放这里,该目录下可新建页面目录。
_drafts:草稿文章
_posts:发布文章
themes:主题文件目录
_config.yml:全局配置文件,大多数的设置都在这里
package.json:应用程序数据,指明hexo的版本等信息,类似于一般软件中的关于按钮
接下来是重头戏_config.yml,做个简单说明:
Hexo Configuration
Docs: http://zespia.tw/hexo/docs/configure.html
Source: https://github.com/tommy351/hexo/
• Site 整站的基本信息
title: 不如 网站标题
subtitle: 码农,程序猿,未来的昏析师 网站副标题
description: bruce sha’s blog | java | scala | bi 网站描述,给搜索引擎用的,在生成html中的head->meta中可看到
author: bruce 网站作者,在下方显示
email: zhangyang.z@icloud.com@qq.com 联系邮箱
language: zh-CN 语言
• URL 域名和文件结构
If your site is put in a subdirectory, set url as ‘http://yoursite.com/child' and root as ‘/child/‘
url: http://ibruce.info 你的域名
root: /
permalink: :year/:month/:day/:title/
tag_dir: tags
archive_dir: archives
category_dir: categories
code_dir: downloads/code
• Writing 写文章选项
new_post_name: :title.md File name of new posts
default_layout: post 默认layout方式
auto_spacing: false Add spaces between asian characters and western characters
titlecase: false Transform title into titlecase
external_link: true Open external links in new tab
max_open_file: 100
multi_thread: true
filename_case: 0
render_drafts: false
highlight: 代码高亮
enable: true 是否启用
line_number: false 是否显示行号
tab_replace:
• Category & Tag 分类与标签
default_category: uncategorized default
category_map:
tag_map:
• Archives 存档,这里的说明好像不对。全部选择1,这个选项与主题中的选项有时候会有冲突
2: Enable pagination
1: Disable pagination
0: Fully Disable
archive: 1
category: 1
tag: 1
• Server 本地服务参数
Hexo uses Connect as a server
You can customize the logger format as defined in
http://www.senchalabs.org/connect/logger.html
port: 4000
logger: true
logger_format:
• Date / Time format 日期显示格式
Hexo uses Moment.js to parse and display date
You can customize the date format as defined in
http://momentjs.com/docs//displaying/format/
date_format: MMM D YYYY
time_format: H:mm:ss
• Pagination 分页设置
Set per_page to 0 to disable pagination
per_page: 10 每页10篇文章
pagination_dir: page
• Disqus 社会化评论disqus,我使用多说,在主题中配置
disqus_shortname:
• Extensions 插件,暂时未安装插件
Plugins: https://github.com/tommy351/hexo/wiki/Plugins
Themes: https://github.com/tommy351/hexo/wiki/Themes
• 主题
theme: modernist raytaylorism pacman modernist light
exclude_generator:
• Deployment 部署
Docs: http://zespia.tw/hexo/docs/deploy.html
deploy:
type: github
repository: git@github.com:bruce-sha/bruce-sha.github.com.git 你的GitHub Pages仓库
修改局部页面
页面展现的全部逻辑都在每个主题中控制,源代码在hexo\themes\你使用的主题\中,以modernist主题为例:
.
├── languages 多语言
| ├── default.yml 默认语言
| └── zh-CN.yml 中文语言
├── layout 布局,根目录下的.ejs文件是对主页,分页,存档等的控制
| ├── _partial 局部的布局,此目录下的.ejs是对头尾等局部的控制
| └── _widget 小挂件的布局,页面下方小挂件的控制
├── source 源码
| ├── css css源码
| | ├── _base .styl基础css
| | ├── _partial .styl局部css
| | ├── fonts 字体
| | ├── images 图片
| | └── style.styl *.styl引入需要的css源码
| ├── fancybox fancybox效果源码
| └── js javascript源代码
├── _config.yml 主题配置文件
└── README.md 用GitHub的都知道
如果你需要修改头部,直接修改hexo\themes\modernist\layout_partial\header.ejs,比如头上加个搜索框:
将如上代码加入即可,您需要修改css以便这个搜索框比较美观。
再如,你要修改页脚版权信息,直接编辑hexo\themes\modernist\layout_partial\footer.ejs。同理,你需要修改css,直接去修改对应位置的styl文件。
统计
因Google Analytics偶尔被墙,故用百度统计,以modernist主题为例,介绍如何添加。
编辑文件hexo\themes\modernist_config.yml,增加配置选项:
baidu_tongji: true
新建文件hexo\themes\modernist\layout_partial\baidu_tongji.ejs,内容如下:
<% if (theme.baidu_tongji){ %>
<% } %>
注册并登录百度统计获取你的统计代码。
编辑文件hexo\themes\modernist\layout_partial\head.ejs,在『/head』之前增加:
<%- partial(‘baidu_tongji’) %>
重新生成并部署你的站点。
不出意外的话,在你的站点的每个页面的左上角都会看到一个恶心的百度LOGO。你只能在『百度统计首页->网站列表->获取代码->系统管理设置->统计图标设置->显示图标』,把那个勾去掉。百度真是恶心,我准备还是用Google Analytics。
分享
我没有添加分享,觉得这个不是很必要,导致页面看起来啰嗦。以加网为例介绍如何添加:
在hexo\themes\modernist\layout_partial\post下新建jiathis.ejs文件。
注册加网获得你的分享代码,写入jiathis.ejs。
在hexo\themes\modernist\layout_partial\article.ejs中,添加<%-partial(‘post/jiathis’)%>。
分享服务还可以使用如下企业提供的技术加网,bShare,百度分享。
网站图标
看一下hexo\themes\modernist\layout_partial\head.ejs,找到这句:
你懂的,将你的favicon.ico放到工程根目录下即可,也就是hexo\source目录。可以在Faviconer制作你的ico图标,国内有比特虫。
• 自定义挂件
除了默认已提供的挂件外,你还可以自定义自己的小挂件,在hexo\themes\modernist\layout_widget\下,新建自己的ejs文件,如myWidget.ejs,然后在配置文件hexo\themes\modernist_config.yml中配置。
widgets:
- myWidget
用上述方法可以添加新浪微博小挂件。
生成自己的微博组件。
添加hexo\themes\modernist\layout_widget\weibo.ejs文件。
配置hexo\themes\modernist_config.yml。
插件
• 安装插件:
npm install
启用插件:在*hexo_config.yml文件添加:
plugins:
插件名
升级插件:
npm update
卸载插件:
npm uninstall
RSS插件
将上述命令中的『plugin-name』,替换为hexo-generator-feed。一旦安装完成,你可以在配置显示你站点的RSS,文件路径\atom.xml。
你可以用rss作为迁移工具,用如下命令读取其他位置的rss:
hexo migrate rss
『source』是本地或网络文件路径。
• Sitemap插件
将上述命令中的『plugin-name』,替换为hexo-generator-sitemap。你可以将你站点地图提交给搜索引擎,文件路径\sitemap.xml。
更多插件的安装方法,请参考官方Wiki。
如果你按照上述步骤做,但插件不起作用,没有生成atom.xml和sitemap.xml,也没有报错,那么你应该cd到你的hexo初始化目录,在该目录下重新安装插件,重试。
• 迁移
hexo支持从其他类型站点迁移,如通用RSS,Jekyll,Octopress,WordPress等,这一部分我没试过。请参考官方文档Hexo Migration。
• 搜索引擎
你可以到屈站长提交你的站点给搜索引擎。其他内容如添加站点或页面的description,提交Sitemap,添加百度统计,Google Analytics等等,参考本文其他章节的内容,不再一一阐述。
• 更新
更新hexo:
npm update -g hexo
更新主题:
cd themes/你的主题
git pull
更新插件:
npm update