一直就想优化一下 Hexo 的代码高亮部分来着,对 ts、tsx 部分的支持一直不太好;也许直接更新 Next 就能直接解决,但博客部分已经魔改了不少,本着这个原则就继续魔改下去好了。本站是在 Next 5 的基础上建成的,不过本文内容与 Next 5 的关系不大

重写代码块的 render

我使用了 hexo-renderer-marked 插件,这个插件的作用就是将 Markdown 文件渲染成 HTML。

查阅文档,发现 hexo-renderer-marked 提供了扩展 marked 插件的功能,marked 是真正进行 Markdown 转换的工具。目前(hexo-renderer-marked@2.0.0 版本)暂未实现该功能,不过主分支上已经支持了,所以我暂时是直接使用了主分支上的代码。

package.json 中可以这么写:

不过在重写之前需要关闭默认的 highlight 功能,在根目录下 _config.yml 修改:

那么事情就简单了,在 scripts 下创建脚本,命名随意,我将其放在了 themes/next/scripts/daief/highlight.js:scripts 下的脚本会在 Hexo 运行时自动被加载,可在此实现一些自定义的插件等。

该脚本的功能就是使用 prismjs 来解析代码块,重写默认的行为。

添加样式文件

在主题配置文件(themes/next/_config.yml)下添加一个自定义选项 prismjs,这样一来版本的维护就比较方便了:

自己添加的东西最好跟库分开,Next 也已经考虑到了这一点,如果需要在每个页面的

中添加内容,只需在 themes/next/layout/_partials/head/custom-head.swig 中编辑即可,prismjs 的样式也在此处添加:

添加行号(或是其他 prismjs 插件)这一步有点坑,我期望的是在构建阶段就完成代码块标签的解析,最终页面在浏览器中展示时只需添加样式支持即可。

HTML 解析已经成功在构建阶段完成了,但像行号以及一些其他 prismjs 插件的功能则需要在浏览器中进行。如果仅仅是在浏览中多加一次调用插件的步骤也就算了,可偏偏插件的触发是在 prismjs 的 hooks 中绑死的;

若是想正常触发 prismjs 的 hooks,那么 prismjs 会在浏览器当中对代码块再次进行解析(这里的意思是假如此时 HTML 没有提前处理,将纯文本的代码块传给 prismjs,prismjs 也能解析出操作符、关键字并包裹上相应的标签和类名),也就是说第一步重写代码块解析的步骤就相当于白费了;

可在浏览器当中解析的结果竟与构建阶段的解析会有不同,有些高亮会有问题;奈何行号插件只能运行在浏览器,同时又不想改太多,最终还是按照 prismjs 官方推荐的方式来使用了。

如果可能大概以后有空的话再来优化一下吧。

行号插件需要在 HTML 中添加 line-numbers 类名以进行标注,这一步在重写代码块的解析过程中(提前解析并不是白费的,确信!)已经完成。

同样本着自定义内容分离的原则,先在 themes/next/layout/_layout.swig 中新增:

接着创建 themes/next/layout/_custom/page-tail.swig 并添加以下内容,参照官方文档来即可:

结语

这么一来就结束了,这么个处理,还是有点不满意的;不过现在至少能支持 ts、tsx 了,这样暂且就够了。

完。

hexo html代码高亮,使用 prismjs 自定义 Hexo 代码高亮相关推荐

  1. 滚动代码循环滚动代码如何怎么样做淘宝轮播代码滚动天猫店铺装修自定义内容代码设置

    滚动代码循环滚动代码如何怎么样做淘宝轮播代码滚动天猫店铺装修自定义内容代码设置

  2. php一键微信分享代码,php版微信自定义分享代码

    在许多大的网站我们都会看到点击分享就可以把数据分享到微信或QQ或其它的平台了,下面我们来看一段php版微信自定义分享代码,代码参考官方开发的没有任何问题. 分享需要认证微信订阅号或者服务号. php ...

  3. Hexo Next为每篇文章设置自定义的banner图片

    title: Hexo Next为每篇文章设置自定义的banner图片 date: 2019-07-23 13:17:46 tags: categories: Hexo技术 小试牛刀 想完成这样一个功 ...

  4. 在vue项目中使用prismjs(网页代码高亮插件)

    在vue项目中使用prismjs 什么是prismjs prismjs是一款代码高亮美化插件,在一些技术博客类的网站中需要展示代码时,可以使用它类似与markdown的代码块, 官网链接:https: ...

  5. hexo博客yilia主题 如何自定义个人博客的背景图片

    hexo博客yilia主题 博客背景的设置 个人博客系列文章目录 hexo博客yilia主题 所有文章模块缺失最新解决方案 hexo+yilia博客报错post.categories forEach ...

  6. 【开发环境】(基于Hexo)个人博客主题(Hexo Fluid)更换

    目录 一.Hexo Fluid: 二.安装主题: 指定主题: 创建「关于页」: 三.更多自定义设置: 一.Hexo Fluid: Hexo Fluid 用户手册 (fluid-dev.com)http ...

  7. linux hexo写博客,自己centos7架设hexo网站

    自己centos7架设hexo网站 一:安装博客框架 1.安装gityum install git-core 2.安装nvm(后面安装Node.js的最佳方式是使用nvm,所以这里安装nvm)wget ...

  8. 代码高亮_微信公众号代码高亮美化工具 Markdown Nice

    微信公众号代码高亮美化工具 使用 Chrome 浏览器把右侧生成的页面直接拷贝到微信中即可. https://www.mdnice.com/ // 目录[TOC] 1. Markdown Nice 简 ...

  9. github page hexo博客gitee_利用Github和hexo搭建个人免费博客

    利用Github和hexo搭建个人免费博客详细过程: 概述: 详细的介绍了利用github和hexo搭建免费的博客,内容详细,浅显易懂,容易上手,大家一起进来看看吧! 1.配置Github相关操作: ...

最新文章

  1. 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)
  2. 换一个角度再谈一下WF
  3. Docker说了这么多 最全的一篇在这里
  4. 快看漫画大数据平台的模型思维与用户增长实践
  5. java内存高水位_jvm(1)---java内存结构
  6. 您将在下一个项目中使用JSF吗?
  7. mysql导入工具 行提交_使用命令行工具mysqlimport导入数据
  8. html自动图片墙,基于html5实现的图片墙效果
  9. 那个花457万美元拍下巴菲特20周年慈善午宴的90后是他!
  10. Logstash+elasticsearch+elastic+nignx
  11. Intelij IDEA解决Dependency无法更新问题
  12. Servlet常用操作(基础)
  13. android 网络错误分析,android wifi打开过程源码解析及Wifi打开失败原因分析
  14. 设置Response中的ContentType
  15. 【知识图谱】Louvain、LPA等5类经典社区发现算法 Python 实战
  16. 【产品面试】经典的一些面试题回顾
  17. aes hex 加密
  18. unexpected character `w‘ in type specifier 解决方案
  19. Android Studio实现一个记账本项目
  20. 计算机网络验证性试验报告

热门文章

  1. UI设计实用素材|闪屏模板
  2. UI设计新趋势|拟物风格UI设计素材模板
  3. a6gpp php,内行人才知道的古董级玛莎拉蒂A6G 2000
  4. scjp java程序员_Sun认证Java程序员SCJP考题常见陷阱
  5. python yield原理_从python的yield说起
  6. java 多线程 扫描,多线程扫描文件夹耗时方法分析
  7. Windows下判断文件是否存在
  8. Live CD|ISO
  9. Memory Translation and Segmentation(内存转换与段)
  10. 场内基金场外基金的区别?