hexo-theme-icarus配置指南
记录本站使用icarus
主题的配置,以及自定义实现功能的实现方式,目前在原有主题基础上做了下属功能:
- 代码高亮增加语言展示功能
- 修正
typora
编辑文章图片展示异常问题
引入主题icarus
引入hexo-theme-icarus
到theme/icarus
目录
1 | git clone https://github.com/ppoffice/hexo-theme-icarus.git themes/icarus -b master --depth 1 |
参考:Icarus快速上手
安装依赖
将theme/icarus/packages.json
的devDependencies
和dependencies
依赖,复制到项目根目录下的packages.json
中,重新触发依赖安装
请勿删除
theme/icarus/packages.json
文件,源代码中有使用该文件
代码高亮增加语言展示功能
增加配置项
_config.icarus.yml
文件增加自定义配置article.highlight.lang
,支持配置true
/false
1 | # 文章配置 |
具体实现代码参见
扩充全局变量定义
在icarus中,通过定义IcarusThemeSettings
JS代码实现,通过变量embeddedConfig
注入到全局<script>
标签中,来实现全局变量IcarusThemeSettings
的定义。你可以在控制台输入IcarusThemeSettings
来查看变量具体的值。
修改后的代码如下,具体参见
1 | // 代码块语言信息 |
在themes\icarus\source\js\main.js
中通过注入全局的变量的方式,将IcarusThemeSettings
注入到该文件内。具体实现参见
实现逻辑功能
在themes\icarus\source\js\main.js
文件中,增加下面的代码,识别语言信息并添加展示按钮。具体实现代码参见
1 | // 读取配置信息 |
修改CSS样式
修改themes\icarus\include\style\codeblock.styl
,修改鼠标指示器为默认样式,具有代码参见
1 | .lang |
修正typora
编辑文章图片展示异常问题
hexo
默认使用hexo-renderer-marked
处理md中的图片,按照官方文档说明,图片需要[图片名称](filename.png)
的格式,不能包含路径。
原文:
启用
post_asset_folder: true
,资源图片将会被自动解析为其对应文章的路径。 例如:image.jpg
位置为/2020/01/02/foo/image.jpg
,这表示它是/2020/01/02/foo/
文章的一张资源图片,
将会被解析为<img src="/2020/01/02/foo/image.jpg">
。
在使用typora
编写博客时,设置将图片复制到同名资源目录。
这样,typora
在你粘贴图片时,生成的图片路径时一个包含资源目录的相对路径。
例如:
为了保证hexo
可以正常渲染,需要将路径修改成
,这样会导致在typora
中展示异常。
有没有可以兼顾的方法?
自定义图片处理过滤器
在项目更目录,新增
scripts
目录添加自定义处理过滤器
fix-image-path.js
该脚本的作用就是把应用的图片的md格式,匹配出包含引用资源的路径,人为去掉相关路径。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22const log = require('hexo-log').default();
hexo.extend.filter.register('before_post_render', function(data) {
const { config } = this;
if(!config.post_asset_folder){
log.debug("[fix-image-path] 未启用post_asset_folder, markdown 图片目录处理程序暂不执行")
return data
}
// 匹配图片语法 
const regex = /!\[(.*?)\]\(([^)]+)\/([^)]+)\)/g;
// 替换为 
data.content = data.content.replace(regex, function(matched, mName, mDir, mFileName, offset, string, groups){
// data.slug中保存的时当前文章文件的名称,也是附件保存的文件夹名称
// 通过该判断限制匹配图片范围,文章中依然可以引入其他目录资源文件
if(mDir == data.slug){
log.info('[fix-image-path] 识别到带目录的图片地址', matched, '->', ``)
return ``
}
return matched
});
return data;
});效果如下
网上有很多其他的教程,例如引入
hexo-asset-img
插件,下面这些,都可以参照。
代办事项
- 修改页面主题宽度
- 修改CDN,优化CDN响应慢的问题
- 实现黑白主题切换
- 实现国际化
- 首页精简展示信息,不显示全文
资源站列表
hexo-theme-icarus配置指南