此版本已弃用。 v0.8.1 包含一个打包缺陷,会导致 npm installEUNSUPPORTEDPROTOCOL 错误失败。所有更改和修复已合并到 v0.8.2。请立即升级。

docmd v0.8.1 引入了可插拔引擎架构、对 Git 索引性能的重大改进,以及 SPA 导航的重要修复。

✨ 亮点

可插拔引擎架构(预览)

docmd 现在支持可插拔引擎系统。新的 @docmd/engine-rust 包为加速 I/O 操作提供了基础,设计为可轻松与现有插件配合使用。

{
  "engine": "rust"
}

引擎是可选的——默认的 JavaScript 引擎处理所有工作负载。Rust 引擎为大型仓库(1000+ 文件)提供可测量的增益,其中 Git 索引和批量文件操作主导构建时间。

架构亮点:

  • 可插拔设计:引擎是 @docmd/engine-* 下的包,遵循与插件相同的模式
  • 捆绑预构建二进制文件:所有支持的平台二进制文件现在通过单一集中的 @docmd/engine-rust-binaries 包分发
  • 延迟加载:原生二进制文件仅在明确选择引擎时加载
  • 插件兼容:插件可以使用引擎 API 进行加速 I/O
  • 自动降级:如果原生二进制文件不可用,JS 引擎会透明地接管

可用引擎包:

描述
@docmd/engine-js 默认 JavaScript 引擎(始终可用)
@docmd/engine-rust Rust 引擎加载器(编排原生加速)
@docmd/engine-rust-binaries 所有平台的集中原生二进制分发
预览状态和平台支持

Rust 引擎处于预览阶段。在最初的 v0.8.1 发布中,预编译的原生二进制文件仅在二进制包中为 macOS ARM64(Apple Silicon) 平台发布。在其他架构上执行的构建会自动且透明地降级到高性能 JS 引擎。内部基准测试显示,在 886 页工作区站点上,冷构建改善约 25%热构建改善约 17%

Git 索引:持久磁盘缓存

Git 插件现在将索引结果持久化到磁盘,跨构建保留。以前,即使没有文件发生变化,Git 元数据也会在每次构建时从头重新索引。新的缓存系统:

  • 将缓存存储干净地路由到操作系统的隔离临时目录(os.tmpdir()),防止顶级目录混乱。
  • 通过生成锚定到仓库 Git 跟踪 URL 或唯一操作系统 inode 标识符的可靠哈希,在目录重命名或移动时安全地持久检索缓存。
  • 通过新的 tmp 配置参数支持可配置的存储路径。
  • 适用于两种引擎路径(Rust 和 JS)以及 execFile 降级。
  • 在官方文档站点(886 页)上提供约 45% 更快的热构建

可配置的 tmp 目录

默认情况下,docmd 现在将内部状态和构建缓存路由到系统的隔离临时文件夹,以保持项目根目录整洁。对于需要在特定位置进行持久缓存的环境(例如,具有缓存键要求的 CI/CD 流水线),你现在可以使用新的 tmp 键配置完整存储路径:

{
  "src": ".",
  "out": "site",
  "tmp": ".docmd-cache"
}

这允许你将 .docmd/ 状态文件夹锚定到任何目录,确保它可以在构建会话之间轻松缓存和恢复。

JSON 配置标准

从 v0.8.0 开始,docmd.config.json 是推荐的配置格式。所有 v0.8 文档已更新为使用 JSON 示例。对于动态配置逻辑,.js.ts 格式仍然完全支持作为降级选项。

🐛 Bug 修复

SPA 导航中的外部链接

修复了一个问题:在通过 SPA 路由器导航到另一个内部页面后,navigation.json 中定义了 external: true 的外部链接被错误地解析为相对路径。链接现在在客户端导航期间正确保留其绝对 URL。

导航外部链接简写

external: 前缀以前只在 Markdown 内容中可用,现在在 navigation.json 中也作为方便的简写支持:

[
  { "title": "GitHub", "path": "external:https://github.com/docmd-io/docmd" }
]

这等同于:

[
  { "title": "GitHub", "path": "https://github.com/docmd-io/docmd", "external": true }
]

Git 缓存目录稳定性和重新定位

修复了一个 bug:在工作区构建期间,Git 插件的磁盘缓存被写入到不断变化的目录。缓存已使用持久仓库标识符从项目根目录直接干净地重新定位到 os.tmpdir(),完全支持自定义 tmp 覆盖路径参数。

引擎配置被遵守

Git 插件现在遵守 engine 配置键。以前,无论配置如何,它总是首先尝试加载 Rust 引擎。设置 "engine": "js" 现在可以正确强制使用 JavaScript 引擎。

📝 完整更新日志

🚀 引擎和架构

  • 可插拔引擎系统@docmd/api 中用于构建加速的新 Engine 接口
  • JS 引擎包:默认引擎提取到 @docmd/engine-js
  • Rust 引擎生态:通过 @docmd/engine-rust-binaries 集中分发二进制的原生 Rust 加速
  • 引擎加载器 API:用于自定义引擎注册的 loadEngine()registerEngine()
  • 引擎配置键docmd.config.json 中用于选择构建引擎的新 engine
  • 引擎显著性:在 TUI 布局内提升了自定义构建引擎的顶级日志显著性

⚡ 性能

  • Git 磁盘缓存:引擎路径结果现在持久化到磁盘用于热构建
  • 持久标识:使用 Git 远程 URL 哈希和操作系统 inode 降级的双模式缓存标识
  • 可配置存储:添加了通过 tmp 配置参数覆盖缓存目标的支持
  • 配置解析器:在工作区子项目循环中添加了对标准 JSON 配置文件的无缝检测支持
  • 磁盘缓存预热:构建流水线在引擎/子进程调用之前读取磁盘缓存

🐛 Bug 修复

  • SPA 路由器:侧边栏导航中的外部链接现在在客户端导航期间正确保留
  • 导航配置external: 前缀现在在 navigation.json 中支持作为简写
  • 链接解析:修复了协议相对 URL 的 URL 解析边缘情况
  • Git 插件:现在遵守 engine 配置键,而不是总是默认使用 Rust
  • 工作区缓存:将状态存储重新定位到确定性临时操作系统结构,以防止循环边界之间的丢失