Markdown 转 Word 工具链
2025 - 至今·自主研发TypeScriptpnpm Monorepo文档转换
问题
技术团队写文档用 Markdown,业务方和外部合作方却普遍用 Word,导致每份文档都要人工重排一遍,标题层级、表格、代码块、图表在转换中极易走样。更根本的问题是早期版本把转换逻辑和界面写在一起:换一套转换规则要动界面代码,想给另一个项目复用时只能整段拷贝,改一处就得在多处同步——本质上是把一次性脚本硬撑成了产品。
方案
先拆包再写功能
用 pnpm workspace 组织 monorepo,明确三层职责——@md-to-word/core 是纯转换内核(Markdown 解析 → docx 生成),@md-to-word/shared 放跨包通用能力,@md-to-word/web 只负责界面。转换内核不依赖任何 React 依赖,因此既能被界面调用,也能被脚本、CLI 或其他项目直接引用。
转换内核实现
以 marked 解析 Markdown拿到结构化 token流,再用 docx 生成 Word 文档;file-saver 负责浏览器端下载,html2pdf.js 覆盖需要 PDF 输出的场景。
界面能力
web 侧用 react-markdown + remark-gfm 做实时预览,react-syntax-highlighter 负责代码高亮,mermaid 渲染流程图,保证「所见即所得」——转换前就能确认排版对不对。
工程约束
workspace 协议(workspace:*)统一依赖版本,tsconfig.base.json 共享编译配置,根级lint / build 一次覆盖三个包,从机制上避免包之间的版本漂移。
成果
转换内核与界面彻底解耦,既能被界面调用、也能独立脚本化复用与单测;根目录一条命令完成全仓构建与检查,对外交付文档不必再手工重排,标题、表格、代码块与图表都能稳定还原。