Obsidian Internal links 双向链接渲染解决方案
这是一篇过期文章 [2024.04.12]
本篇文章已过期。
- 本文为文章 Hexo 博客适配 Obsidian 新语法 中双链语法部分的分离,强烈建议使用新方法适配双向链接。
- 在没有合适插件的情况下,我自己探索了一套方法实现这个效果。但是这套方法安装插件较多,依赖性复杂,不易维护。于是我自己写了一个更好的插件完成了这个效果,更多故事详见 第一次写 Hexo 插件
- 这套工作链服务了半年,成功见证了数十篇文章诞生。截至光荣退休时它还能工作😀。
文章介绍了在 Hexo 中成功渲染双向链接的方法。
相关插件安装
对于 OFM 语法中的 [[ ]],需安装以下三个插件。
Hexo 第三方插件 hexo-abbrlink
确保安装了 Hexo 第三方插件 hexo-abbrlink
。hexo-abbrlink
是一个生成文章永久链接的插件,平时写博客就很建议你使用。后续插件将基于 hexo-abbrlink
进行工作。
仓库地址:rozbo/hexo-abbrlink: create one and only link for every post for hexo (github.com)
Obsidian 第三方插件 link-info-server
从 GitHub 仓库下载压缩包:moelody/link-to-server (github.com)(理论上应该在 Obsidian 第三方插件市场找,但是找不到)。安装了插件之后记得启用。
Hexo 第三方插件 hexo-link-obsidian
仓库地址:moelody/hexo-link-obsidian (github.com)。此插件还支持更多双向链接功能,具体可查看仓库说明文档。
该插件目前存在的问题:
- 关于网络图片的问题 · Issue #3
- 关于生成的链接问题 · Issue #5
- 不支持 webp 图像的识别 Pull Request #6
- 必须保证 Obsidian 软件的运行(临时解决方法:详看下一小节)
- 混淆了接口类型的图片(临时解决方法:修改源代码中的图片正则匹配,彻底弃用该插件的图片功能)
- 不支持形如 [](![]()) 的格式识别。纯文本中存在这种字符就报错,就比如这里我用的是粗体加反斜杠转义而不是使用行内代码格式表示。(临时解决方法:修改源代码中的图片正则匹配,彻底弃用该插件的图片功能)
【可选】自写脚本实现 hexo 静态网页生成前自动检查
注意到,要想运行正常,得先打开 Obsidian 软件启动 3333 端口。为了避免疏忽造成链接生成的失误,我写了一个脚本对相关端口和插件进行了检查。
写好 js 脚本
使用脚本前需要安装本脚本依赖的 npm 包。也就一个 npm inastall -g yamljs
(全局安装还是局部安装自己看着办),读 yaml 文件用的。
1 | // Writer: uuanqin |
这个脚本主要做以下事情:
- 检查 Obsidian 程序是否启动
- 检查
hexo-link-obsidian
插件是否安装 - 确认
hexo-link-obsidian
插件监听的端口 - 查询对应端口占用的进程是否为 Obsidian 程序
在这里,我将脚本命名为 check_obsidian.js
。
package.json 的配置
package.json 中的 script 有以下特点:
- 具有钩子性质
- 其中一条命令异常退出(返回非零值)后续命令则终止
由于在每一次本地部署和网站发布前我们都需要检查一下 Obsidian 是否打开,我们可以这样设置钩子。
什么是钩子?比如,我们设置的本地部署命令为 hexo 三连 "start": "hexo clean && hexo g && hexo s"
,那么我们可以新建一个命令:"prestart": "node check_obsidian.js"
。当我们每次执行 npm run start
时,都会先执行 prestart、再执行 start。
当 prestart 过程出现错误时,start 就不会执行。这样我们就实现了部署前的检查。
分享一下我目前的 script 配置:
1 | "scripts": { |
注意
hexo algolia 放在 hexo d -g 后,否则报错
提示
&&
表示与,根据“短路效应”。只有前面的命令执行成功,后面的命令才会继续执行。
&
表示两条命令同时执行。
本文参考
- scripts | npm Docs (npmjs.com)
- docs.npmjs.com/cli/v6/configuring-npm/package-json#dependencies
- moelody/link-to-server (github.com)
- moelody/hexo-link-obsidian (github.com)
- Run shell scripts using npm script (awsm.page)
- node.js 读取 yaml 文件_js 读取 yaml_az44yao 的博客-CSDN 博客
- JavaScript 中查找指定字符串的几种方式_js 查找字符串_魏晓蕾的博客-CSDN 博客
- 正则表达式 – 元字符 | 菜鸟教程 (runoob.com)
- JavaScript Promise | 菜鸟教程 (runoob.com)
- windows 中查看端口占用、pid、禁用 - 山顶的鱼 - 博客园 (cnblogs.com)
- JavaScript Set 的用法与理解_js set push_暮春风的博客-CSDN 博客
- 循环与迭代 - JavaScript | MDN (mozilla.org)