将 Markdown 转换为微信公众号 HTML 格式 —— Go 语言实现
- ✅ 开箱即用 - 单一二进制文件,无需任何依赖
- ✅ 微信公众号兼容 - 生成的 HTML 完全符合微信平台规范
- ✅ 多种内置主题 - 5 种精美主题,支持自定义主色调
- ✅ 代码语法高亮 - 基于 goldmark-highlighting,支持 190+ 种语言
- ✅ Front Matter 解析 - 支持 YAML 元数据(文章标题等)
- ✅ 阅读时间估算 - 自动统计字数并显示阅读时长
- ✅ 完全内联样式 - CSS 嵌入 HTML,无需外部文件
- ✅ 嵌入主题文件 - 使用
embed将 CSS 打包进二进制,便于分发 - ✅ 灵活配置 - 支持命令行参数、环境变量、配置文件
git clone https://github.com/wychl/md2wechat
cd md2wechat
go build -o md2wechat ./cmd/md2wechat/main.gogo install github.com/wychl/md2wechat/cmd/md2wechat@latest访问 Releases 页面下载对应平台的二进制文件。
# 转换文件并输出到标准输出
md2wechat README.md
# 输出到指定文件
md2wechat -output wechat.html article.md
# 使用特定主题和颜色
md2wechat -theme grace -color #92617E doc.md -output out.html
# 从标准输入读取(管道)
cat doc.md | md2wechat -theme simple| 选项 | 说明 | 默认值 |
|---|---|---|
-theme |
主题名称:default, simple, grace, fresh, warm |
default |
-color |
主色调(十六进制,如 #0F4C81) |
#0F4C81 |
-reading-time |
显示阅读时间预估 | false |
-output |
输出 HTML 文件路径(不指定则输出到 stdout) | - |
-json |
输出 JSON 格式(包含 HTML 和元数据) | false |
-quiet |
静默模式,不输出任何提示信息 | false |
-skill |
技能模式(等价于 -json -quiet) |
false |
-input |
指定输入文件(也可作为位置参数) | - |
-help |
显示帮助信息 | - |
所有选项均可通过环境变量设置,前缀为 MD2WECHAT_:
| 环境变量 | 对应选项 |
|---|---|
MD2WECHAT_THEME |
-theme |
MD2WECHAT_COLOR |
-color |
MD2WECHAT_READING_TIME |
-reading-time |
MD2WECHAT_OUTPUT |
-output |
示例:
export MD2WECHAT_THEME=simple
export MD2WECHAT_COLOR="#2C3E50"
md2wechat doc.md支持配置文件 .md2wechat.yaml / .md2wechat.json / .md2wechat.toml,放在当前目录或用户目录。
示例 .md2wechat.yaml:
theme: grace
color: "#92617E"
reading-time: true
output: "article.html"
quiet: false优先级:命令行参数 > 环境变量 > 配置文件 > 默认值
使用 -json 或 -skill 时,程序输出 JSON 格式,便于其他工具集成:
{
"success": true,
"html": "<div>...</div>",
"meta": {
"title": "文章标题",
"reading_time": 3,
"word_count": 456
}
}错误时输出:
{
"success": false,
"error": "错误描述"
}| 主题 | 名称 | 默认主色调 | 风格 |
|---|---|---|---|
| 经典蓝 | default |
#0F4C81 |
正式、专业 |
| 优雅紫 | grace |
#92617E |
柔和、典雅 |
| 简洁灰 | simple |
#2C3E50 |
现代、极简 |
| 暖橙 | warm |
#E67E22 |
活力、温暖 |
| 清新绿 | fresh |
#27AE60 |
自然、护眼 |
在 Markdown 文件开头使用 YAML 格式定义元数据:
---
title: 我的第一篇文章
author: 作者名
date: 2025-01-01
---
# 正文开始...当前支持的字段:
title- 文章标题(会显示在生成的 HTML 中)
生成的 HTML 完全符合微信公众号平台要求:
- ✅ 所有样式内联(
<style>标签嵌入,微信支持) - ✅ 使用微信兼容的 HTML 标签(
div,section,pre,code等) - ✅ 图片自适应:
max-width: 100%+height: auto - ✅ 代码块横向滚动:
overflow-x: auto - ✅ 响应式布局:移动端字体和间距自动调整
- ✅ 无外部依赖:所有资源(CSS、字体)均内嵌或使用系统默认
md2wechat/
├── cmd/
│ └── md2wechat/ # 主入口
│ └── main.go
├── internal/ # 私有包
│ ├── config/ # 配置加载(支持 viper)
│ ├── frontmatter/ # YAML 元数据解析
│ ├── input/ # 输入读取(文件/标准输入)
│ ├── output/ # 输出处理(文件/stdout/JSON)
│ ├── readingtime/ # 阅读时间计算
│ └── theme/ # 主题加载与嵌入
│ └── themes/ # CSS 主题文件(内嵌)
├── pkg/ # 可公开导入的库
│ └── convert/ # 核心转换逻辑(导出 Convert 函数)
├── go.mod
├── go.sum
└── README.md
# 克隆仓库
git clone https://github.com/wychl/md2wechat
cd md2wechat
# 直接运行示例
go run ./cmd/md2wechat/main.go -theme fresh README.md
# 构建
go build -o md2wechat ./cmd/md2wechat/main.go- 在
internal/theme/themes/目录下创建your-theme.css - 主题需配合
base.css使用(仅覆盖变量或特定样式) - 重新构建:
go build ./cmd/md2wechat/main.go
欢迎提交 Issue 和 Pull Request!
MIT License © 2026 wychl