安装 Hexo
安装
在安装 Hexo 之前,有一点要注意的是,在 Hexo 3.0.0-rc.4 版本开始,hexo-cli 就独立出去了,所以 Hexo 其实是有两个程序的:
hexo-cli:命令行界面的 hexo,安装在 npm 的 node_modules 目录下,用于初始化 hexo 的环境,已添加到 path 环境变量,全局可用hexo:完整版的 hexo,安装在 hexo 博客的目录下,用于管理 hexo ,只能在 hexo 博客的目录下使用
需要先安装 hexo-cli,再安装 hexo,在任意位置打开命令行窗口,输入:
|
|
就会在 C:\Users\<用户名>\AppData\Roaming\npm\node_modules 目录安装好 hexo-cli 及其依赖的 packages。
可能会看到一个 WARN,但是不用担心,这不会影响 Hexo 的正常使用。
在命令行中输入 hexo v,如果有显示 hexo-cli 的版本号,即表示安装成功:
初始化
在准备存放 hexo 博客的文件夹,执行以下命令:
初始化后的目录内容为:
初始化后的 blog 还不能使用 hexo,因为完整版的 hexo 还没安装,需要进入 blog 目录,执行 npm install 命令,npm 工具就会根据 package.json 文件中记录的 dependencies 去下载安装需要的依赖包(包括完整版的 hexo):
P.S. 也可以只安装纯粹的 hexo,不包含任何插件,只需要在初始化后的目录,执行
npm install hexo --save即可。
安装完所有模块后,就可以体验 hexo 了。
体验
在 hexo 目录中,执行以下命令(2 个命令是一样的效果):
当看到 INFO Hexo is running at http://0.0.0.0:4000/. Press Ctrl+C to stop. 就表示 hexo 已经运行了,只要打开浏览器,
在地址栏输入 127.0.0.1:4000 或 localhost:4000 即可访问了。
到目前为止,hexo 在本地的基本配置已经结束了。
Hexo 目录 & 文件
参考:官方文档
_config.yml
Hexo 的全局配置文件,整个 Hexo 博客的配置都可以在这里进行配置。
package.json
Hexo 应用程序的信息,包括名称、版本、所需的依赖库等等。
node_modules 目录
Hexo 的依赖库,以及安装的插件都是放这里的。
如果会 node,可以自己写插件来对 Hexo 进行扩展,如果写的插件很有用,希望别人也用上你写的插件,可以发布到 npm。
程序比较简单的,建议写成脚本(script),相对来说比较复杂的,建议写成插件(package)。
scaffolds 目录
模版 文件夹。当您新建文章时,Hexo 会根据 scaffold 来建立文件。
默认提供 draft.md(草稿)、post.md(文章)、page.md(页面)这三种模版,可以自定义修改,也可以创建自己的模版。
例如:
P.S. 此模版非彼模版(Template),scaffold 在词典里是“脚手架”的意思,我也不知道该怎么描述(语死早- -)相信只要看看这三个文件,以及分别用这三个文件新建出来的文章文件进行对比,一下子就懂了。
大概就是对该文章的一些描述,比如 Title,Date,Description,Tag,Category 等等,有了这些信息,Hexo 就可以对该文章进行分类。详情请看>>Front-matter。
scripts 目录
脚本文件夹。脚本是扩展 Hexo 最简易的方式,在此文件夹内的 JavaScript 文件会被自动执行。
如果会 javascript,可以自己写插件来对 Hexo 进行扩展。
程序比较简单的,建议写成脚本(script),相对来说比较复杂的,建议写成插件(package)。
source 目录
资源文件夹是存放用户资源的地方。所有的 markdown 文件(文章、草稿、页面等),以及图片、音乐、视频等,都是放在这里的。
除 _posts 文件夹之外,其他所有以 _ (下划线) 开头命名的文件和文件夹以及隐藏的文件,在解析成博客时将会被忽略。Markdown 和 HTML 文件会被解析并放到 public 文件夹,而其他文件会被拷贝过去。
public 目录
发布 文件夹。Hexo 生成出来的完整的博客文件(整个博客的所有文件都在这了),可以将 public 里面的文件上传到 Github、Gitcafe、VPS、Heroku、OpenShift 等服务器上,即可访问。本机可以使用 hexo server -s 命令,也可以直接使用浏览器打开 index.html(不过由于路径问题,无法加载资源)。
themes 目录
主题 文件夹。Hexo 会根据主题来生成静态页面。可以到 Hexo 主题站 下载,可惜官方收录的主题比较少,目前只有 19 个。
因为 hexo 主题几乎都是开源的,而主题的作者一般都会放在 github 上,这就让我们获取 hexo 的主题变得很简单,只要到搜索一下就可以找到很多优秀的主题了。
补充:Wiki 上有个 Theme 列表,虽然已被标记为弃用,但收集的主题还是有相当多的。
其他文件
.gitignore
git 的忽略文件,可删
db.json
hexo 的 json 数据库文件,可通过 hexo clean 命令清除数据(放心,不会删除文章内容的),也可以直接删掉,但还是会生成的。
Hexo 配置
Hexo 的配置主要是通过修改 _config.yml 文件进行的,也可以通过使用以下命令对某一项进行设置
一定要注意:yaml 的语法问题,在每一项的冒号后面一定要有一个空格,建议修改完配置后,使用一些 YAML 语法检查工具检查一下有没有语法错误(例如:YamlLint)。
_config.yml 介绍
_config.yml 中的配置项可以分成几个大类:
网站(Site)、地址(URL)、目录(Directory)、文章(Writing)、分类 & 标签(Category & Tag)、日期 / 时间格式(Date / Time format)、分页(Pagination)、扩展(Extensions)、部署(Deployment)。
网站 (Site)
| 参数 | 描述 |
|---|---|
title |
网站标题 |
subtitle |
网站副标题 |
description |
网站描述 |
author |
您的名字 |
language |
网站使用的语言,使用 2 个字母表示的 ISO-639-1 码 |
timezone |
网站时区。Hexo 默认使用您电脑的时区。时区列表(表中的 TZ 列),例如 Asia/Shanghai 或 PRC 表示中国时区。 |
网址 (URL)
| 参数 | 描述 | 默认值 |
|---|---|---|
url |
网址 | |
root |
网站根目录 | |
permalink |
文章的 永久链接 格式 | :year/:month/:day/:title/ |
permalink_default |
永久链接中各部分的默认值 |
关于
url和root:如果您的网站存放在子目录中,例如http://domain.com/blog,则请将您的url设为http://yoursite.com/blog并把root设为/blog/。关于
permalink:定义文章的 URL 结构,默认的:year/:month/:day/:title/所生成的连接就是2015/10/15/文章标题,详情请看>>Permalink关于
permalink_default:可以设置一些自定义的用于permalink的变量(其实还可以用于其他地方,比如new_post_name等,可以自己尝试 ^_^),比如可以这样使用:
1234 permalink: :year-:language-:fruit-:title.htmlpermalink_defaults:fruit: applelanguage: zh_cn则生成的文章 URL 为:
http://your.domain.com/2015-zh_cn-apple-文章标题.html
目录 (Directory)
| 参数 | 描述 | 默认值 |
|---|---|---|
source_dir |
资源文件夹,这个文件夹用来存放内容。 | source |
public_dir |
发布文件夹,这个文件夹用于存放生成的站点文件。 | public |
tag_dir |
标签文件夹 | tags |
archive_dir |
归档文件夹 | archives |
category_dir |
分类文件夹 | categories |
code_dir |
include code 文件夹(放在 source 文件夹内) | downloads/code |
i18n_dir |
国际化(i18n)文件夹 | :lang |
skip_render |
指定不会被渲染的文件(夹),可使用通配符(glob expressions)来配置路径。 |
关于
skip_render:以source文件夹为起始路径,感谢 @xuanwo 的《Hexo 常见问题解决方案》和《如何不处理 source 目录下某个子目录的所有文件,仅仅是将其 copy 到 public 目录中对应目录?》:
|
|
关于
code_dir:Include_Code,官网的解释太简单了,Octopress 官网有详细的解释,大概意思就是在文章中使用这样的语法在将某个文件(代码,支持语法高亮)的内容显示在文章中:
|
|
关于
i18n_dir:默认值:lang是一个变量,详情请看>>Permalink#Multi-language_Support以及i18n
文章 (Writing)
| 参数 | 描述 | 默认值 |
|---|---|---|
new_post_name |
新建文章的文件名格式 | :title.md |
default_layout |
新建文章时的默认布局 | post |
auto_spacing |
在中文和英文之间加入空格 | |
titlecase |
把标题转换为 title case | false |
external_link |
在新标签中打开链接 | true |
filename_case |
把文件名称转换为 (1) 小写或 (2) 大写 | 0 |
render_drafts |
显示草稿文章 | false |
post_asset_folder |
开启 asset 文件夹 | false |
relative_link |
把链接改为与根目录相对的地址(相对路径) | false |
future |
显示未来的文章 | true |
highlight |
代码块的高亮设置 |
关于
new_post_name:自定义文件名的结构,跟permalink类似。关于
auto_spacing:可以增加文章内容的可读性。在 Hexo 2.8.2 版本开始,该功能已独立成一个插件 hexo-filter-auto-spacing,这个配置项也就去掉了,只要装上插件,就会自动加上空格,不想要自动空格,则删除插件即可。如果使用了这个插件,当你的标题(h1~h6)有中英文混合时,请手动加上空格,否则在生成目录(TOC)时,目录会失效,因为标题的 id 也被加上了空格。
效果请看 >> 来源。关于
titlecase:文章标题的每个单词的首字母大写(英文单词),体验一下 >> Convert to Title Case注意:
- 修改
titlecase后,需要执行hexo clean清除缓存才生效。a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs等单词的首字母不会被转换为大写。关于
filename_case:新建文章时的文件名的大小写(仅仅是文件名,跟标题无关)。
0表示跟输入一致,1表示全部字母转换成小写,2表示全部字母转化成大写:
例如:你真是Native,Too young,too Simple啊!
0:你真是Native,Too-young,too-Simple啊!.md
1:你真是native,too-young,too-simple啊!.md
2:你真是NATIVE,TOO-YOUNG,TOO-SIMPLE啊!.md关于
post_asset_folder:请参考:官方介绍。把资源放到 asset 文件夹内,使用时只需要文件名就可以了,不需要完整的路径。因为生成博客后,资源跟当前的文章是在同一目录下的(所以你的资源中不能有一个叫index.html的文件,否则会冲突,当然也没人会怎么做- -)。{% asset_path filename %}:插入一个资源的路径,就仅仅是显示一个路径
{% asset_img filename [title] %}:插入一张图片,等同于
{% asset_link filename [title] %}:插入一个资源的链接,点击会在新标签打开关于
future:是否显示日期是未来的文章。如果有些文章不想马上就发布,等到某个时刻再发布,可以将Front-matter中的日期改为指定的时间,并将future设置为false即可。需要注意的是:因为是静态博客,不像 WordPress 等动态博客在到了指定时刻会自动发布,Hexo 需要再次发布才会生成文章的页面。
分类 & 标签 (Category & Tag)
| 参数 | 描述 | 默认值 |
|---|---|---|
default_category |
默认分类名称 | uncategorized |
category_map |
分类别名 | |
tag_map |
标签别名 |
这 3 项配置都仅在 Hexo 拼接 URL时被使用。
关于
default_category:在permalink中如果使用了:category变量,且当文章没有设置categories时,使用该默认分类名称。关于
category_map和tag_map:设置 category 和 tag 的别名,在 url 中将会使用这个“别名”来替代 category 或 tag 名称。(建议 category 或 tag 有中文字符时使用)
日期 / 时间格式 (Date / Time format)
Hexo 使用 Moment.js 来解析和显示时间。可以根据 Moment.js 官方文档 的格式来自定义。
| 参数 | 描述 | 默认值 |
|---|---|---|
date_format |
日期格式 | YYYY-MM-DD |
time_format |
时间格式 | H:mm:ss |
分页 (Pagination)
| 参数 | 描述 | 默认值 |
|---|---|---|
per_page |
每页显示的文章量(0 = 关闭分页功能) | 10 |
pagination_dir |
分页目录(保存分页的文件夹名称) | page |
此分页设置是全局的,包括主页、Archives 页、Categeries 页和 Tags 页,如果只想主页进行分页,可设置全局
per_page: 0,主页per_page: 10,其他不设置。P.S. 默认的
landscape主题有个 BUG,在/archives/页面里,只显示第一页的文章,不能导航到其他分页。
|
|
扩展 (Extensions)
| 参数 | 描述 |
|---|---|
theme |
当前主题名称 |
deploy |
部署 |
关于
deploy:部署的配置项,配置好就可以一键(命令)部署到各种服务器环境,比如:github、gitcafe、Heroku、OpenShift 等,或通过 FTP、Rsync 等同步到远程服务器上。详情请看>>官方文档-部署
其他配置
还有一个 server 项是默认没有在 _config.yml 中的,如果不想使用默认的 4000 端口,又嫌每次开启服务都要输入 -p 80 指定端口,那么可以在 _config.yml 中添加(这是默认配置,可自行修改,也可只写其中一项):
Hexo 命令
在 blog 目录中,输入 hexo 命令,可以查看 hexo 命令的帮助信息:
|
|
总的来说,分为 Commands(命令)和 Options(选项)两种。下面将一一介绍每个 Command 以及 Option 的用法。
hexo clean
名称:清除命令
别名:无
使用:hexo clean
参数:无
选项:无
用于清除缓存(db.json 文件)和生成的文件(默认是 public 文件夹,根据 _config.yml 中所指定的 public_dir 来清除)。
hexo config
名称:配置命令
别名:无
使用:hexo config [<name> [value]]
参数:
name:配置项名称,如果不指定,则显示所有设置项value:设定配置项的值,如果不指定,则显示单个配置项的值
选项:无
用于查看或者修改配置项(_config.yml 文件)的值,查看时是以 JSON 格式输出的,而修改时会直接影响 _config.yml 配置文件。
例子一
查看 hightlight 配置项:
输出:
例子二
设置 highlight 配置项:
如果配置项是数组(序列)形式的,则使用索引(从 0 开始)的方式:
hexo deploy
名称:部署命令
别名:hexo d
使用:hexo deploy [option]
参数:无
选项:
--setup:只设置,不部署-gor--generate:先生成,再部署(相当于先后执行generate和deploy两个命令)
部署需要另外安装插件 >> 部署。
暂时不明 --setup 选项的具体用法,官方文档也没任何说明。
hexo generate
名称:生成命令
别名:hexo g
使用:hexo generate [option]
参数:无
选项:
-dor--deploy:生成后立刻部署-for--force:强制重新生成-wor--watch:监控文件的变化。当修改source文件夹的文件时,自动生成。
生成静态文档。
hexo help
名称:帮助命令
别名:hexo h
使用:hexo help [command]
参数:
command:查看某个命令的使用方法。可以是任意一个 hexo 的命令,如config、generate等等。
选项:无
hexo init
名称:初始化命令
别名:hexo i
使用:hexo init [destination]
参数:无
选项:
destination:目标文件夹,指定要初始化的文件夹,如果不指定,则初始化当前文件夹
将某个目录初始化为 hexo 博客的目录。
hexo list
名称:列出命令
别名:hexo l
使用:hexo list <type>
参数:
type:可以使用page(页面),post(文章),route(树状目录),tag(标签)等方式列出信息。
以各种形式列出博客的信息。
hexo migrate
名称:迁移命令
别名:hexo m
使用:hexo migrate <type>
参数:
type:迁移的类型,具体类型因插件而异,一般为rss,wordpress,joomla等等。
迁移需要另外安装插件 >> 迁移。
从其他博客系统中迁移文章到 Hexo,支持 RSS,Jekyll,Octopress,WordPress 等等。
hexo new
名称:新建命令
别名:hexo n
使用:hexo new [layout] <title>
参数:
layout:指定使用的布局,可以是post,page,draft或者任何自定义的布局,不指定则默认为posttitle:文章标题,使用引号"或'包裹。选项:
-por--path:自定义文章路径。-ror--replace:如果已存在同名文章,则覆盖。-sor--slug:跟--path类似。
例子一
以 draft.md 为 layout,在 source/_drafts/aaa/bbb/ 目录创建一个名为 ccc.md 的文件,文章标题为 title:
例子二
以 post.md 为 layout,在 source/_post/ 目录创建一个名为 aaa-bbb-ccc.md 的文件,文章标题为 title123:
P.S.1. 在使用简写的 -p 或 -s 或 -r 时,会在文章的 Front-matter 中多出对应的 p: aaa/bbb/ccc 或 s: aaa/bbb/ccc 或 r: true,删了也没影响;而使用 --path 或 --slug 或 --replace 则没有,可能是 BUG。
P.S.2. path 和 slug 一起用时,只有 path 生效
P.S.3. path 和 slug 的来源:https://github.com/hexojs/hexo/issues/379
hexo publish
名称:发表命令
别名:hexo p
使用:hexo publish [layout] <filename>
参数:
layout:指定使用的布局,可以是post,page,draft或者任何自定义的布局,不指定则默认为post。filename:草稿文件名,例如hello-world,不要写.md。选项:无
将 source/_drafts 中的草稿文章移动到 source/_post/ 目录,可以发表为 page 等。
P.S.1. 如果使用 hexo new draft --path aa/bb/cc 命令创建的草稿,会比较悲剧,因为 filename 会将输入的斜杠 / 转换成 -,导致找不到文件。(解决方案:手动将整个 aa 目录复制到 source/_post/ 目录)
P.S.2. 虽然 draft 可用,但其实还是移动到 source/_post/ 目录。
hexo render
名称:渲染命令
别名:hexo r
使用:hexo render <file1> [file2] ...
参数:
file[n]:至少指定一个文件,起始目录是根目录。选项:
--engine:指定渲染引擎。--output:输出目标文件,如果不指定,则输出到终端。起始目录是根目录。--pretty:美化 JSON 输出。
这个命令一般用不到。
hexo server
名称:服务命令
别名:hexo s
使用:hexo server [option]
参数:无
选项:
-ior--ip:指定服务的 IP 地址,默认绑定所有地址(0.0.0.0)-lor--log [format]:按格式输入 log,不指定format则默认为dev-oor--open:在浏览器中打开 url(需要将 ip 改成localhost或127.0.0.1)-por--port:指定服务端口,默认为 4000-sor--static:静态模式,仅使用public目录中的静态文档
开启服务。
log 的 format 可选:dev,default,combined,combined,common,short,tiny 之一;
也可以自定义,要使用引号 " 或 ' 包裹
例子一
请求方法、状态码、URL:
输出结果:
详情请看 >> morgan
hexo version
名称:版本信息命令
别名:hexo v
使用:hexo version
参数:无
选项:无
hexo –config
执行命令时,指定一个配置文件,替代默认的
_config.yml配置文件,不可单独使用,必须跟命令一起使用。
有效命令:clean、config、deploy、generate、list、migrate、new、publish、render、server
无效命令:help、init、version
例子一
使用不同的配置部署到不同的服务器(一个博客,多种风格):
配置 A:
public_dir:public-githubtheme:landscapedeploy:github
配置 B:public_dir:public-aliyuntheme:nextdeploy:rsync
分别执行以下命令:
hexo --cwd
指定“Current Working Directory(当前的工作目录)”
用途不明。
hexo --debug
执行命令时,显示
debug信息。
有效命令:init、version、clean、config、deploy、generate、list、migrate、new、publish、render、server
无效命令:help
hexo --draft
显示草稿文章,等同于
_config.yml中的render_drafts。
有效命令:generate、list、server
无效命令:help、init、version、clean、config、deploy、migrate、new、publish、render
hexo --safe
安全模式,可以禁用所有的插件(plugin)和脚本(script)。如果在安装新插件后出现问题,可以在执行命令时加上
--safe选项。
有效命令:deploy、generate、list、migrate、new、publish、render、server
无效命令:help、init、version、clean、config
hexo --silent
安静模式,不提示终端信息,与
--debug相对应。--debug会输出所有级别的信息(TRACE、DEBUG、INFO、WARN、ERROR、FATAL)
默认情况下会输出INFO以上信息(INFO、WARN、ERROR、FATAL)--silent则隐藏所有信息
有效命令:init、version、clean、config、deploy、generate、list、migrate、new、publish、render、server
无效命令:help
迁移
如果在使用 Hexo 之前,已经有一个运行中的博客了,想迁移到 Hexo,也是非常简单的事情,最多就两条命令:安装插件、迁移命令。
从 Jekyll 迁移
把 Jekyll 的 _posts 文件夹内的所有文档复制到 source/_posts 文件夹,并在 _config.yml 中修改一下 new_post_name 设置项,即可:
|
|
从 Octopress 迁移
把 Octopress 的 source/_posts 文件夹内的所有文档复制到 source/_posts 文件夹,并在 _config.yml 中修改一下 new_post_name 设置项,即可:
|
|
从 WordPress 迁移
从 RSS 迁移需要安装 hexo-migrator-wordpress 插件:
|
|
在迁移之前,先要在 WordPress 中导出博客:
在 WordPress 的仪表盘中,打开 “工具” → “导出” → “WordPress”。
然后使用 hexo migrate 命令进行迁移,source 可以是导出的文件,也可以是一个网址:
|
|
通过 RSS 迁移
从 RSS 迁移需要安装 hexo-migrator-rss 插件:
|
|
然后使用 hexo migrate 命令进行迁移,source 可以是 RSS 的文件,也可以是一个网址:
|
|
通过 RSS 可以迁移很多博客的文章,只要博客服务商提供了 RSS 订阅功能,就可以很方便地将文章迁移到 Hexo 了。
目前支持 RSS 的有:
CSDN、博客园 cnblogs、JAVA 博客、C++ 博客 等等。
其他迁移方式
除了从上述国内主流博客的迁移之外,迁移插件列表 还有其他的比如 blogger、github-issue、joomla 等迁移方式,国内用得比较少,就不说了。
结语
这一节也太啰嗦了,是我的打开方式不对吗?唠唠叨叨了半天,都还没进入主题!下一节——基本操作 将从 Hexo 的写作开始,详细介绍 Hexo 的使用方式。