前言
hexo + next搭建时遇到一些问题,包括插入图片、toc、代码行号、首行缩进等。
推荐在对应github页面的issue板块搜索自己的问题,可以少走很多弯路。
环境安装
- 安装node.js
- 安装git
- 然后在合适的文件夹下执行命令:
1 | npm install hexo-cli -g |
此时打开 http://localhost:4000 ,便可以看到hexo自带的主题。
在bolg文件夹下会有如下文件:
名称 | 说明 |
---|---|
_config.yml | 配置文件 |
node_modules | hexo插件 |
public | hexo g生成的文件 |
source | md文件以及资源文件 |
theme | 主题文件夹 |
db.json package.json package-lock.json | json文件 |
配置github仓库
申请github账号
建立一个与自己用户名相同的仓库,即 username.github.io,username必须与你的用户名一致。
修改hexo的_config.yml文件,将末尾的配置修改为:
1 | deploy: |
主题选择
可以在知乎上找找别人推荐的主题,无意中看到有个2016年theme的排名:https://en.abnerchou.me/Blog/5c00ca67/ 。这里面的主题都还可以,样式简洁,功能全面。
我想要一个自带TOC目录、页面简洁、可以查看站点文章的主题,最后权衡下来选择了next主题。
yilia主题: https://github.com/litten/hexo-theme-yilia
next 主题: https://github.com/theme-next/hexo-theme-next
选择好主题后,在_config文件中,将theme改为主题名称即可启用主题。
hexo部署
下载部署插件npm install hexo-deployer-git –save
部署命令:
hexo clean 清理缓存
hexo generate/hexo g 本地生成
hexo deploy/hexo d 部署到远程仓库
或者使用hexo d -g直接部署
其他hexo指令
hexo new/hexo n 新建文章
hexo server/hexo s 启动服务,本地可通过4000访问
hexo version/hexo v 查看hexo版本信息
hexo help 查看帮助
image引入
hexo官网 https://hexo.io/zh-cn/
首先需要安装image插件
1 | npm install hexo-asset-image --save |
安装完成之后进入hexo\node_modules\hexo-asset-image文件夹,查看里面的readme文档,使用时要注意:
Make sure post_asset_folder: true
in your _config.yml
.
Just use ![logo](logo.jpg)
to insert logo.jpg
.
将hexo文件夹下的_config.yml文件的post_asset_folder属性改为true,利用hexo生成新的md文件时xxx.md时,会创建相应的xxx同名文件夹,资源文件放在文件夹中,利用hexo g
命令时,便会将文件夹内的资源存在在public文件夹内index.html相同的文件夹内。因此插入logo.jpg图片时,只需要在md文件输入 ![logo](logo.jpg)
即可。
- 对于本地而言,图片应该存放在与md文件同名的文件夹内,例如:
hexo n test
在 hexo\source\_posts文件夹下就会生成test.md以及test文件夹。只有将test.md所依赖的资源文件放在test文件夹,hexo g
生成时,才可将资源文件放到正确的文件夹下。而在test.md中引用logo.jpg图片时,使用 ![logo](logo.jpg)
,在命令行输入hexo s
运行hexo然后在 http://localhost:4000 查看发现图片可以正确引用。但是本地md文件却看不到图片。需要改成 ![logo](test/logo.jpg)
添加相对路径,本地才可引用成功(除非你把图片copy到md文件相同的路径下)。
将路径由 ![logo](logo.jpg)
改为 ![logo](test/logo.jpg)
后,执行hexo g命令,在对应的index.html文件中,image的路径解析为:
1 | <meta property="og:image" content="http://tru-xu.github.io/2019/05/12/test/logo.jpg"> |
这是正确的解析,自动添加日期并且logo.jpg实际存储位置与index.html中相同。
- 采坑:**这里是个大坑,大部分的中英文的md文件名称都没有问题,但文件名包含某些特定字段的md文件,图片路径会解析失败。比如
http
。
当md文件名包含http时。例如hexo n httpXXX
创建httpXXX.md文件,执行hexo g
,查看对应的index.html中的图片路径:
1 | <meta property="og:image" content="http://tru-xu.github.io/2019/05/12/httpXXX/httpXXX/logo.jpg"> |
图片路径中出现两个httpXXX,在网页点击F12,在源码中查看图片路径,路径中确实也是多出了一个httpXXX。图片路径错误,无法正常加载。
图片添加相对路径时,图片解析会出bug(也不能算bug,按照官方文档,图片路径只写图片名称不带相对路径时不会有问题,但这样本地编辑时就无法看到图片预览)。
这里由于我不是专业前端,所以没有细看hexo图像插件的源码。应该是路径替换时发生的问题。
toc 目录引入
- 需要TOC支持的主题 yilia,icarus, indigo等。
toc安装文档地址:https://github.com/bubkoo/hexo-toc
1 | npm install hexo-toc --save |
并修改hexo目录下的配置文件_config.yml文件,添加toc的相关配置,参数具体含义请查看上面链接里面的readme。
1 | toc: |
- 不需要TOC支持的主题,例如next
若使用next主题,安装hexo自带的toc后。next主题自带的toc会出现bug,点击toc目录无法跳转。在页面上F12查看next主题自带的toc链接,发现是#undefined。各种百度博客没啥用,最后早github的issue里面找到问题来源:
https://github.com/theme-next/hexo-theme-next/issues/380
hexo的toc插件导致next自带的目录无法跳转,将hexo-toc移除之后,此问题便可解决。
1 | npm remove hexo-toc --save |
代码块行号
远程:hexo配置文件_config.yml中的height里面的line_number改为true即可。
本地:typora的文件->偏好设置中找到代码块,选择显示代码块即可。
首行缩进
远程:themes\hexo-theme-next-master\source\css_custom\custom.styl 添加
1 | .post-body p { text-indent: 2em; } |
参考:https://github.com/iissnan/hexo-theme-next/issues/680
本地:编辑–>空格与换行–> 首行缩进
algolia搜索
- 登陆algolia,注册账号或者使用github账号,本人使用github账号。
- 点击
dashboard
进如下面页面,点击indices
,新建index,index命名随便写最好全英文。
- 配置权限:点击
APIkeys
->All API Keys
,找到你的app对应的API key,点击edit
,找到ACL,添加search、addObject、deleteObject、listIndexes、deleteIndex
,点击update
。
- 安装hexo-algolia插件
1 | $ cd hexo |
- 修改本地站点_config.yml文件,
1 | algolia: |
- 更新上传Index。命令行以及输出如下所示
1 | $ export HEXO_ALGOLIA_INDEXING_KEY= Your Search-Only API key # 使用 Git Bash,使用windiws的cmd会出bug |
1 | $ hexo algolia |
- 至此已完成上传操作,可以在algolia网站indices页面中找到对应的文件。切换到 NexT 目录,并安装 algolia-instant-search 到
source/lib
目录。
1 | $ cd themes/next |
- 修改
主题配置文件
,在配置文件中找到algolia_search
,将enable
改为true
。注:关闭其他搜索插件。
- 无内容上传到algolia:
1 | INFO 0 posts collected |
执行命令顺序如下所示,否则无内容上传到algolia上。
Hexo clean
hexo algolia