同步思源笔记文档 Markdown 到 github 指定路径,可以用于 hexo, hugo 等博客工具
- 支持自动上传图片到 s3/oss/cos 等对象存储图床
- 支持自定 yaml front matter 自定义
在思源集市安装 siyuan-sync-github 或者是手动下载最新 Release 解压缩到 data/widget/siyuan-sync-github
目录
创建 siyuan-sync-github/config.js
文件,目前仅支持手动设置配置文件,暂未实现配置页面
注意: 默认情况下,我们获取当前挂件块所在页面下的所有文档
var SiyuanSyncConfig = {
// 思源的 api 地址,一般不需要修改
baseURL: "http://127.0.0.1:6806",
// sql 模板,这个可以不配置,不配置默认值如下
// select * from blocks where type = 'd' and path like '/${current_doc_id}/%' and content like '%${keyword}%' order by sort asc, updated desc
// sql: ""
// github 仓库配置
github: {
owner: "",
repo: "",
secret: "",
},
sync: {
// 文件保存文件夹
dir: "source/_posts/siyuan/",
// 文件名映射规则,以什么字段作为文件名,文件扩展名固定为 .md
filename: {key: "urlname"},
// 属性映射, yaml front matter 只会映射这配置了的属性
// key: 文档自定义属性值,或者是自带的属性值
// type: array, json,不配置则不对数据做解析
// array: 以逗号分割字符串数组
// json: 会执行 JSON.parse
// default: 如果文档不存在对应的属性值,使用默认值填充这个值
// 详细说明可以查看下方的 FAQ
attrs: {
index_img: { key: "title-img" },
categories: { key: "categories", type: "array" },
tags: { key: "tags" },
show_category: { default: true },
date: { key: "updated_at" },
urlname: { key: "urlname" },
title: { key: "title" }
},
// 是否上传图片到图床
migratePictures: true
},
// 图床配置,支持所有兼容 s3 协议的对象存储
// 例如 oss, cos, 七牛云 等
// 如果 sync.migratePictures = false,那么这个配置可以不用配置
s3: {
accessKey: "",
secretKey: "",
endpoint: "https://oss-cn-hangzhou.aliyuncs.com",
bucket: "",
region: "oss-cn-hangzhou",
prefix: "siyuan",
// 自定义域名
baseURL: "https://you-domain.com/"
},
}
可以修改配置中的 sql
模板, sql 模板默认值如下,类似 ${current_doc_id}
字段表示变量,会在执行前进行替换
${current_doc_id}
: 当前挂件块所在文档 id${keyword}
: 当前输入框的搜索关键词
select * from blocks
where type = 'd' and path like '/${current_doc_id}/%' and content like '%${keyword}%'
order by sort asc, updated desc
所以我们不想局限于当前文档的子文档的话我们可以修改 sql 为
select * from blocks
where type = 'd' and content like '%${keyword}%'
order by sort asc, updated desc
yaml front matter
就是生成 Markdown 文件时,我们会在 Markdown 文件的最上方添加一部分 yaml 字段,这个功能在 hexo、hugo 等静态博客中很常见,最后生产的效果类似下方
---
title: 这是一篇测试文档
date: 2022-11-16 10:00:00
tags: ["test"]
---
test
支持设置的字段分为两种,一种是思源自带的系统字段,一种是大家可以设置的自定义字段,下面展示了系统字段
{
"id": "20221115205844-yy9adlf",
// 文档标签
"tags": [
"k8s",
"kubebuilder"
],
// 文档标题
"title": "第三方应用如何调用我们 kubebuilder 生成的自定义资源?",
// 笔记的题头图,去掉了 css
"title-img": "assets/operator-kubebuilder-clientset-20221116105037-powgjpb.png",
// 自带的更新时间
"updated": "20221116103539",
// 这两个字段是挂件帮忙格式化后的字段
"updated_at": "2022-11-16 10:35:39",
"created_at": "2022-11-16 23:13:29",
}
自定义字段就是我们设置文档属性的时候自定的字段,字段名和字段值都是大家自行设置的
属性字段这么多,挂件在导出文档的时候不会所有字段都渲染出来,渲染的字段依靠配置里的 sync.attrs
字段控制
{
title_rename: { key: "title", type: "string", default: "" },
}
配置示例如上,attrs 的 key 是我们最终渲染到 Markdown 文件中的 key, value 是一个对象
// Attr front matter 属性定义
export interface Attr {
// 表示思源文档的属性值,例如我们这里取值是 title,表示使用文档标题
key: string;
// `default`: 表示如果没有设置这个字段,就用 default 来填充
default: any;
// 数据类型, 表示这个字段的类型,这个一般用于我们的自定义字段
// - `string`: 默认值,不做任何处理
// - `json`: 会使用 `JSON.parse` 解析字符串,字符串必须是一个 json 字符串
// - `array`: 会使用 `,` 分割字符串为数组,例如 `"".split(",")`
type?: "string" | "json" | "array"
// `required`: 是否必填,如果必填字段不存在会直接报错
required?: boolean
// 在表格中对外展示的配置
column?: AttrColumn
}
// AttrColumn 在表格中对外展示的配置
export interface AttrColumn {
// 是否展示
show?: boolean
// 列表宽度
width?: number
// 展示的名字
label?: string
[key: string]: any
}
我们上面的示例配置渲染出来的文档就是
---
title_rename: 测试文档
---
test
- 支持自定义表格显示字段
- 支持设置字段必填校验
- 已发布文档禁用发布
- 支持 配置
sql
模板