Obsidian 增强导出与自定义附件路径兼容问题记录 #
- 日期:2025-10-15
- 相关插件:
- obsidian-enhancing-export(导出增强)
- obsidian-custom-attachment-location(自定义附件路径)
- 操作系统:Windows
背景与现象 #
在使用 obsidian-custom-attachment-location 为每篇笔记按模板动态放置附件(例如:./999-工具/assets/${noteFilePath})的同时,使用 obsidian-enhancing-export 导出(如 Markdown/HTML/PDF),发现导出的图片等资源路径有时无法解析,只有在 Obsidian 设置里"重新设置"一次核心的附件目录后才会临时生效。

复现步骤(摘要) #
- 在 vault 中启用两个插件:
- 自定义附件路径插件使用按笔记路径的模板(例如
./999-工具/assets/${noteFilePath})。 - 导出增强插件使用内置的 Pandoc 模板(其中包含
--resource-path="${currentDir}"和--resource-path="${attachmentFolderPath}")。
- 自定义附件路径插件使用按笔记路径的模板(例如
- 在某篇笔记中插入本地图片(图片实际被保存到自定义附件目录)。
- 使用导出增强进行导出,图片在导出结果中无法解析(找不到资源)。
根因分析 #
- 自定义附件路径插件是通过覆写
app.vault.getConfig('attachmentFolderPath')的 getter,在"读取配置时"动态返回"与当前笔记相关"的附件目录。 - 导出增强插件在构造导出上下文时,读取的是"静态配置快照"
app.vault.config.attachmentFolderPath,没有调用 getter。因此在导出过程中拿到的是固定值,和每篇笔记的动态目录不一致,导致--resource-path指向错误。
换言之:应使用 app.vault.getConfig('attachmentFolderPath')(动态)而不是 app.vault.config.attachmentFolderPath(静态)。
解决方案 #
本次选择"方案 B(无需改代码)",同时记录"方案 A(最小代码改动)“备用。
方案 A:最小改动(改 1 行,长期正确) #
将导出增强插件里构造导出上下文时的附件目录获取方式改为调用 getter:
- 原:
let D = Y.attachmentFolderPath ?? "/";
- 建议改为:
let D = (e.app.vault.getConfig && e.app.vault.getConfig("attachmentFolderPath")) ?? Y.attachmentFolderPath ?? "/";
这会让导出增强始终读取自定义附件插件提供的"按笔记动态目录”。这是最干净的做法,但需要改插件打包后的 main.js,后续升级可能覆盖。
吐槽:该项目的main.js几乎不可读
后面为了适配叶页面采用了该修改插件的方案 ### 方案 B:不改代码(在模板里补充一条 resource-path)
利用导出增强的命令模板支持模板表达式,在 Arguments 中新增一条 --resource-path,直接根据当前笔记路径拼出自定义附件目录。示例(与模板 ./999-工具/assets/${noteFilePath} 对应):
在导出增强的"命令模板 → Arguments"中,除了原有的
--resource-path="${currentDir}"
--resource-path="${attachmentFolderPath}"
再追加一条(将前缀 999-工具/assets 替换为你自己的规则):
--resource-path="${vaultDir}/999-工具/assets/${(currentPath.substring(vaultDir.length+1).replace(/\.[^/.]+$/,''))}"
说明:
vaultDir:库根目录(绝对路径,导出增强会在 Windows 下自动规范为正斜杠)。currentPath:当前笔记绝对路径(导出增强同样在 Windows 下规范为正斜杠)。currentPath.substring(vaultDir.length+1):得到"库内相对路径(含扩展名)"。replace(/\.[^/.]+$/,''):去掉扩展名,等价于${noteFilePath}。- 多个
--resource-path:Pandoc 会依次搜索,追加的这一条不会影响原有逻辑。 - 这样组合出的路径等价于自定义附件插件模板生成的目录。
优点:
- 无需修改插件文件,插件升级无影响。
- 可按需为不同导出类型分别添加或调整。
注意:
- 如果以后更改了自定义附件插件的目录模板(如前缀或规则),记得同步更新这条
--resource-path。 - 若附件目录包含空格,已用引号包裹,Pandoc 可正确识别。