2.0.0
⚠️ 这是一个破坏性重构版本。插件几乎被完全重写,架构、工具系统、设置界面与国际化均重新设计。请仔细阅读下方说明后再升级。
💥 破坏性变更(Breaking Changes)
- 插件主类重命名:
CPlugin/AceCodeEditorPlugin→RHTPlugin,并统一主模块导出。 - 源码目录结构重组:废弃
src/components、src/core、src/lib三层,重组为src/model(管理器与接口)、src/settings(设置存储与设置页)、src/util(工具函数)、src/toolkit(各功能工具)。 tableEnhancements工具被完全移除:包括表格增强管理器、Markdown 表格解析器、公式引擎及 ag-grid 相关代码。- 设置接口变更:
IPluginSettings移至settings/IPluginSettings.ts,新增toolkit字段(Record<string, IToolSettings>);删除IToolSettings.version字段。 - 内部事件总线移除:删除自定义
EventBus,IPluginContext不再暴露emit/on/addCommand。 - 国际化调用方式变更:
t()→LL()。 - 最低 Obsidian 版本提升:
1.8.0→1.13.0。 - 赞助链接变更:微信/支付宝二维码 → Ko-fi。
🚀 新增功能(Added)
工具系统框架(核心)
- 引入全新的工具注册与管理框架,作为后续功能模块的基石:
ToolkitRegistry单例:提供工具的注册、查询(getAll)、注销与清空。BaseTool抽象类:继承 ObsidianComponent,封装初始化、加载/卸载、设置管理、启用状态与错误收集,减少各工具重复实现。@Toolkit装饰器:基于reflect-metadata,在类上声明id/name/version/description/icon元信息并自动注册到注册表。ToolkitManager:与插件生命周期深度集成,加载addChild/ 卸载removeChild,单个工具失败不中断其他工具加载。PluginContext:统一管理插件实例、设置存储与日志上下文。
文件夹脚手架(Folder Scaffolder)— 新工具
- 全新工具,支持基于模板批量生成文件夹结构。
- 提供结构树编辑器、模板编辑器、剪贴板结构导入、文件夹建议输入等组件。
文件夹模板(Folder Templates)— 大幅增强
- 重构为基于规则(Rule)的模板匹配系统:
RuleMatcher:按路径长度降序匹配,支持完全匹配、子目录匹配与根目录回退。VariableEngine+expressionEvaluator+variableContext:支持模板变量与表达式求值({{date}}、{{time}}、{{title}}等)。applyPolicy:模板应用策略。migrate:旧配置自动迁移。
- 通过
workspace.onLayoutReady延迟注册create事件,兼容 Obsidian UI 生命周期。
快速路径(Quick Path)— 增强
- 新增复制文件夹路径命令与菜单项。
- 文件菜单(
file-menu)、多选文件菜单(files-menu)、编辑器菜单(editor-menu)完整支持。 - 编辑器中可将当前文件/文件夹路径粘贴到光标处。
- 路径分隔符改为枚举(换行 / 逗号 / 分号 / 空格),新增独立设置界面(Toggle + Dropdown)。
React 化的设置界面
- 全新基于 React 19 的设置页,采用网格布局(
ObsidianSetting.Container)。 ObsidianSetting组件:将 Obsidian 原生 Setting 封装为可组合的 React 组件,支持ColorComponent、ProgressBarComponent、SearchComponent、SliderComponent、TextAreaComponent等控件及className/disabled/cta/warning/tooltip/visible等属性。- 每个工具渲染图标、版本号、描述,并提供独立「额外设置」入口。
- 新增通用设置布局组件
ToolSettingsLayout。
国际化(i18n)系统重构
- 迁移到 typesafe-i18n 库,翻译调用具备完整类型约束。
- 支持简体中文 / 繁体中文 / 英文三语。
- 统一术语:「文件夹 / 文件夾」统一改为「目录 / 目錄」。
工具函数库与 Obsidian 集成组件
Strings:字符串判空、默认值、邮箱校验、前缀匹配、安全小写转换。Objects:exists、isNullOrUndefined空值判断。processObTemplate/TemplateProcessEngine:Obsidian 模板占位符替换引擎。ObsidianAppContext+useObsidianAppHook:在 React 树中安全注入 Obsidian App 实例。MarkdownFileSuggestInput、FolderSuggestInput、FolderSuggest、FileListControl:文件 / 文件夹建议输入与选择列表控件。
测试与文档
- 新增 Jest 测试套件,覆盖
folderScaffolder(StructureBuilder、clipboardStructure)、folderTemplates(RuleMatcher、VariableEngine、applyPolicy、migrate、types)。 - 新增完整
docs/文档目录:架构、工具开发指南、设置系统、文件夹模板、国际化指南、测试指南、构建与发布。
🔄 变更(Changed)
- 构建脚本重构:CSS 改用 PostCSS + postcss-nesting 处理,支持更灵活的构建模式参数解析。
- 迁移到 pnpm workspace 管理(新增
pnpm-workspace.yaml)。 - 去除第三方依赖:
fs-extra→node:fs、builtin-modules→builtinModules、ensureDirSync→mkdirSync、dotenv→ 直接读取环境变量。 - 增强 GitHub Actions 发布工作流,添加构件证明(artifact attestations)生成。
- 启用 TypeScript 实验性装饰器与
emitDecoratorMetadata。
🐛 修复(Fixed)
- 修复文件夹模板的创建时延问题:插件加载时 vault 中已存在文件会触发批量
create事件,导致模板被误套用。改为按stat.ctime时间窗(5 秒阈值)过滤与短时去重(10 秒 TTL),并修复重命名后同名文件复用导致的漏处理问题。 - 修复
scripts/link-data.mjs中构建目标路径变量名(rootDir→projectRoot)指向错误的问题。 - 修复
EventBus导入路径大小写导致的模块解析问题。
🗑️ 移除(Removed)
- 整个
tableEnhancements工具模块(表格增强 / 公式 / ag-grid,约 −3,000 行)。 src/components、src/core、src/lib、types/types.ts等旧目录与文件。main.ts中的样板示例代码(ribbon 图标、状态栏、示例命令、模态、定时器等)。- 旧的
.eslintrc、.eslintignore、MAKEFILE、assets目录。 package-lock.json(改用pnpm-lock.yaml)。obsidian-extend.d.ts(改由obsidian-typings提供)。
📦 依赖(Dependencies)
- 新增:
react/react-dom^19.2.7、reflect-metadata^0.2.2、@tanstack/react-virtual、radix-ui、uuid。 - 开发依赖新增:
jest、ts-jest、typesafe-i18n、postcss、postcss-nesting、eslint-plugin-obsidianmd等。 - 环境要求:Node.js ≥ 22.x,Obsidian ≥ 1.13.0。
⬆️ 升级须知
- 本次为破坏性重构,升级前请务必备份配置。
- 升级到 Obsidian ≥ 1.13.0。
- 若依赖
tableEnhancements(表格增强)功能,请暂缓升级或寻找替代方案。 folderTemplates用户的旧配置会通过migrate自动迁移,建议升级后在设置页检查。- 升级后需在设置页重新启用所需工具。
Full Changelog: 1.4.1...2.0.0