昨天写完《在Nuxt4中集成Drizzle ORM + SQLite加密》准备同步到Blog,居然发现同步命名不可用了。查看控制台是“429:Too Many Requests”。尝试切换 UserAgent 和 IP 重试也无法解决这个问题,估摸着是 Token 被Ban了。
命令行拉取文档失败了
一、同步功能失效调整
小问题,不要慌。我首先想到的语雀文档可以导出 Markdown 文件,那我再写个命令行工具,把从语雀API读取改为本地Markdown文件读取就行。由于有之前API同步的底子,改写过程很顺利。
勾选此选项会导致图片上方会多一行ocr识别文字
导出文档时不要勾选『导出带PlantUML等额外卡片内容』,否则所有图片标签上方会多出一行<!-- 这是一张图片,ocr 内容为:...... -->的ocr描述文本。
图片上方多出了一行ocr识别结果
基于我之前编写的语雀文章同步工具,我很快就改出了一版本地可用的Markdown转换工具。只需要输入这行命令即可完成Md文件转换和图片同步工作:hexo convert -f [原始md文件] -s [新md文件名] -c [所属的category]。
初版脚本效果
打开浏览器预览,与过去通过语雀API同步的效果完全一致👍。
新方式生成效果
二、Hexo升级至8.1.0
成功修改发布之后,发现Hexo在去年更新了8.0大版本,打算研究研究一起更新了。看了下几次更新文档,唯二的两个破坏性更新是放弃了Node.js 14和Node.js 16环境,最低需求Node.js 20.19。
24年我尝试更新过一次Hexo 7.2.0,当时遇到了文章图片路径错误导致无法展示的BUG(当时查看Iusse也没人修复这个问题),最后只能降低到7.1.1临时先用着。想着这次跨大版本升级,心里还有点发怵。结果没想到这次升级非常顺利,没遇到任何问题就用上8.1.0了,实测编译速度提升了20%-30%😁。
Hexo 8.1.0 已发布
前置条件
- 做好源代码备份(Git则创建好专门的升级分支),防止升级失败后无法回滚!(❗ **重要**)
- 确保
Node.js版本大于20.19.0
开始升级
(1) 在项目根目录运行npm install hexo@8.1.0进行升级。
升级新版本
(2) 然后运行npm update同步更新其他依赖项。
更新其他依赖项
(3) _config.yml语法调整
external_link不再支持布尔值(boolean)类型, 需要将其改为对象形式。
1 2 3 4
| external_link: enable: true field: site exclude: ''
|
use_date_for_updated选项被废除,需要改用updated_option控制文章更新
- 代码高亮配置调整,需要通过
syntax_highlighter指定渲染高亮引擎,默认启用的highlight。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| syntax_highlighter: highlight.js highlight: auto_detect: false line_number: true line_threshold: 0 tab_replace: "" exclude_languages: - example wrap: true hljs: false prismjs: preprocess: true line_number: true line_threshold: 0 tab_replace: ""
|
(4) 验证效果
依次输入下方命名重新构建项目。
1 2 3 4 5 6 7 8
| hexo clean
hexo generate
hexo server
|
三、其他更新(地图修复、代码块高亮功能完善)
- 足迹地图已修复,目前能够展示完整中国地图和东部、南部岛屿,并且具备了根据GeoJSON数据实时更新全新版图变化。(修复过程参考:jVectorMap番外篇:用 GeoJSON 补全未竟的足迹地图)
放大地图并拖拽到底下,可以看到完整岛屿和南海十段线
- 代码块样式重构,参考网上很火的“代码片段”分享模块样式进行重制,并对1202个代码块的设置语言进行检查和调整。
代码块样式调整
- 在修改代码块样式和配置高亮时,在Hexo文档了解到代码块还支持
mark:行号,行号-行号的行高亮语法,于是我又美化调整了行高亮的效果,现在看起来还不错。
初始的样式效果
优化后样式效果
- 最后给代码块加上了复制按钮,方便大家快速拷贝代码块内容。
复制按钮效果