EvIsX

荧 · 维思

Obsidian 写博客发布到 Astro 博客项目

发布于 # tutorials # obsidian

本文通过 evisx/obsidian-content-publisher 导出

  1. Astro 博客项目1 (使用 git 版本管理)
  2. Obsidian 和 插件 (obsidian-content-publisher)

场景

博客文章原文都放在 Obsidian vault 的某个文件夹下 (假设 Blog)。需要某种形式复制一份到博客项目里。

可以手动转换:

  1. 拷贝博客文章到 astro 项目的内容文件夹2下 (假设 src/content/posts/)
  2. 将 frontmatter3转换为项目需要的 (schema4)
  3. 同时将文章 (同时也是笔记) 内 Obsidian 的 Wikilink5 处理成可以访问的 Markdown Link

插件做了什么?

将上述的过程自动化,同时提供 frontmatter 转换的配置表 (支持少量的 js 代码 {{script}})。

(实现过程见 Obsidian 插件开发 Content Publisher)

依赖插件生成的 pubUrl

设置需要跟博客项目发布出来的 url 一致。(大部分默认 slug 是文件相对路径,但也可以用 slug 覆盖6)

image.png

上图配置:{{buiSlug}} 表示使用插件默认的 slug 生成规则

image.png

上图配置表示依次尝试执行模板里的代码,替换 [ [Wikilink] ][markdown](link)

上图配置: [{{refer}}]({{pubUrl}}) 表示处理形如 [ [refer] ] 链接,插件将找到引用的文件并基于上面设置的 pubSlug 计算得到最终的 pubUrl = urlPrefix + pubSlug,作为真正的链接。

%%原文%%
(实现过程见 [ [Obsidian 插件开发 Content Publisher] ])

%%转换结果%%
(实现过程见 [Obsidian 插件开发 Content Publisher](https://evisx.me/posts/technical-development-obsidian-plugin-obsidian-plugin-development-content-publisher))

frontmatter 转换

基于用户设置的配置表重新生成 YAML frontmatter

查看全部支持的变量或方法

image.png

比如 always; title; {{file.basename}} 表示该属性总是需要,名称为 title,其值为笔记的文件名。将生成形如:

---
title: Obsidian 写博客发布到 Astro 博客项目
---

present; modDatetime; {{frontmatter.modTime}} (例子与图示略不同),frontmatter 为笔记的元数据,present 规则将先计算代码模板的值,如果存在才生成该属性到文章,否则不生成。

最后 none; slug; {{pubSlug}} 表示不需要该属性设置。(如果必要,可以直接删除)

%%obsidian 笔记%%
Obsidian 写博客发布到 Astro 博客项目
---
author: evisx
tags:
  - obsidian
description: Obsidian writes blogs and posts to the Astro blog project
draft: false
---

%%转换结果%%
Obsidian 写博客发布到 Astro 博客项目
---
title: Obsidian 写博客发布到 Astro 博客项目
author: evisx
pubDatetime: 2024-04-28T22:52:03+08:00
modDatetime: 2024-04-28T22:52:00+08:00
featured: false
draft: false
tags:
  - obsidian
description: Obsidian writes blogs and posts to the Astro blog project
---

与其他插件一起使用

  1. 中文翻译成英文组成 slug

导出和发布

image.png

最后部署博客项目。

总结

插件目前仅处理一些导出时的差异 (YAML frontmatter 和 Wikilink),就能实现博客文章原文和博客项目分离的目的。提供了一些处理模板,但是使用和理解需要一定的 JS 代码基础。

References

Footnotes

  1. Build your first Astro Blog | Docs

  2. Content Collections | Docs

  3. YAML Frontmatter - Fork My Brain

  4. Content Collections - defining a collection schem| Docs

  5. Internal links - Obsidian Help

  6. Content Collections - defining custom slugs | Docs