Skip to content

项目结构

WeMD 采用 Monorepo 架构,使用 pnpm workspace + TurboRepo 管理。


目录总览

WeMD/
├── apps/                 # 应用程序
│   ├── web/              # Web 版编辑器
│   ├── electron/          # 桌面版外壳
│   └── server/           # Logo 图片上传服务 (NestJS)
├── packages/             # 共享代码
│   └── core/             # 核心库(Markdown 解析、主题、深色模式)
├── templates/            # 主题 CSS 模板
├── scripts/              # 构建脚本
└── turbo.json            # TurboRepo 配置

各目录详解

apps/web/(Web 版主程序)

这是核心代码所在。

apps/web/src/
├── components/       # React 组件
│   ├── Editor/       # Markdown 编辑器
│   ├── Preview/      # 预览区
│   ├── Header/       # 顶部导航
│   ├── Sidebar/      # 文件侧边栏
│   ├── Theme/        # 主题管理(含可视化设计器)
│   ├── History/      # 历史记录与版本
│   ├── Settings/     # 设置面板 (图床等)
│   └── Welcome/      # 首次使用欢迎页
├── store/            # Zustand 状态管理
│   ├── editorStore.ts    # 编辑器状态(内容)
│   ├── themeStore.ts     # 主题状态(样式、切换)
│   ├── themes/           # 内置主题定义
│   ├── fileStore.ts      # 文件列表状态
│   └── historyStore.ts   # 历史记录状态
├── storage/          # 存储适配器
│   └── adapters/
│       ├── IndexedDBAdapter.ts   # 浏览器存储
│       └── FileSystemAdapter.ts  # 本地文件夹
├── hooks/            # 自定义 Hooks
├── services/         # 业务服务(图床上传)
├── config/           # 静态配置(样式常量)
├── lib/              # 核心工具库(平台适配)
├── utils/            # 通用工具函数
├── types/            # 全局类型定义
└── styles/           # 全局样式

想改 XX,去哪找?

想改的功能文件位置
编辑器行为components/Editor/MarkdownEditor.tsx
搜索面板components/Editor/SearchPanel.tsx
预览区渲染components/Preview/MarkdownPreview.tsx
主题管理components/Theme/ThemePanel.tsx
可视化主题设计components/Theme/ThemeDesigner/
内置主题列表store/themes/builtInThemes.ts
图床上传services/image/
图床设置components/Settings/ImageHostSettings.tsx
历史记录管理components/History/HistoryManager.tsx

apps/electron/(桌面版)

Electron 外壳,包装 Web 版为桌面应用。

apps/electron/
├── src/
│   ├── main.ts       # 主进程(窗口管理、菜单、IPC)
│   ├── preload.ts    # 预加载脚本(暴露 API 给渲染进程)
│   └── updater.ts    # 自动更新逻辑
├── tsconfig.json     # TypeScript 配置
└── package.json      # Electron 依赖配置

apps/server/(后端服务)

基于 NestJS 的简单的服务端,主要用于处理特殊的图片上传需求。

apps/server/src/
├── upload/           # 上传模块
└── main.ts           # 入口文件

packages/core/(核心库)

与 UI 无关的核心逻辑。

packages/core/src/
├── MarkdownParser.ts     # Markdown 转 HTML
├── ThemeProcessor.ts     # 主题处理
├── wechatDarkMode.ts     # 微信深色模式模拟算法
├── plugins/              # Markdown 解析插件
└── themes/               # 内置主题 CSS
    ├── basic.ts          # 基础样式
    ├── academic-paper.ts # 学术论文
    ├── cyberpunk-neon.ts # 赛博朋克
    └── ...

templates/(主题模板)

供用户参考的 CSS 文件,带详细注释。

templates/
├── Template.css          # 📝 带注释的模板
├── Academic-Paper.css
├── Cyberpunk-Neon.css
└── ...

TurboRepo 任务

turbo.json 定义了任务依赖关系:

命令说明
pnpm build按依赖顺序构建所有包
pnpm dev并行启动所有开发服务器
pnpm lint检查所有包的代码

专为微信公众号设计的 Markdown 编辑器