top

mdctl 开发者指南

项目介绍

mdctl 是一个用于处理 Markdown 文件的命令行工具,主要功能包括:

  1. 下载功能:自动下载 Markdown 文件中的远程图片到本地,并更新引用路径
  2. 翻译功能:使用 AI 模型将 Markdown 文件翻译成多种语言
  3. 上传功能:将本地图片上传到云存储,并更新 Markdown 文件中的引用
  4. 配置管理:管理工具的配置信息
  5. 其他功能:如导出为其他格式、生成 llms.txt 文件等

项目结构

../mdctl
├── cmd
│   ├── config.go
│   ├── download.go
│   ├── export.go
│   ├── llmstxt.go
│   ├── root.go
│   ├── translate.go
│   └── upload.go
├── internal
│   ├── cache
│   ├── config
│   ├── exporter
│   ├── llmstxt
│   ├── markdownfmt
│   ├── processor
│   ├── storage
│   ├── translator
│   └── uploader
├── main.go
├── go.mod
├── go.sum

核心模块说明

命令行模块 (cmd/)

使用 Cobra 库实现命令行界面,主要命令包括:

处理器模块 (internal/processor/)

负责处理 Markdown 文件中的远程图片下载,主要功能:

翻译模块 (internal/translator/)

负责翻译 Markdown 文件,主要功能:

上传模块 (internal/uploader/)

负责上传本地图片到云存储,主要功能:

存储模块 (internal/storage/)

定义存储提供者接口和实现,主要功能:

llms.txt 生成模块 (internal/llmstxt/)

负责从网站的 sitemap.xml 生成 llms.txt 文件,主要功能:

配置模块 (internal/config/)

负责管理配置信息,主要功能:

开发风格和约定

代码组织

  1. 命令与实现分离:命令行接口在 cmd/ 目录,具体实现在 internal/ 目录
  2. 模块化设计:每个功能都有独立的模块,如处理器、翻译器、上传器等
  3. 接口定义:使用接口定义模块间交互,如存储提供者接口

错误处理

错误处理采用 Go 语言的标准方式,通过返回错误值进行传递和处理。

配置管理

配置文件存储在 ~/.config/mdctl/config.json,包含:

日志输出

使用标准输出进行日志记录,提供详细的处理信息和错误信息。

添加新功能的步骤

  1. 定义命令:在 cmd/ 目录下创建新的命令文件,定义命令行接口
  2. 实现功能:在 internal/ 目录下创建相应的实现模块
  3. 注册命令:在 cmd/root.goinit() 函数中注册新命令
  4. 更新文档:更新 README 文件,添加新功能的说明

构建和发布

项目使用 Makefile 和 GoReleaser 进行构建和发布:

扩展点

添加新的存储提供者

  1. internal/storage/ 目录下创建新的提供者实现
  2. 实现 Provider 接口
  3. 在初始化时注册提供者

添加新的 AI 模型支持

  1. internal/translator/ 目录下扩展翻译器实现
  2. 添加新模型的 API 调用
  3. 更新配置模块以支持新模型的配置

添加新的 Markdown 处理功能

  1. 创建新的处理器模块
  2. 实现 Markdown 解析和处理逻辑
  3. 添加新的命令行接口