微信公众号格式化器是一个专门为微信公众号设计的 Markdown → HTML 转换模块,核心逻辑参考了 doocs/md 项目。
当用户选择「微信公众号」作为发文平台时,插件自动完成以下操作:
mdToWechatHtml)<style> 标签import { mdToWechatHtml } from '@synccaster/core';
const markdown = `
# Hello World
This is a **test** paragraph.
## Features
- Item 1
- Item 2
`;
const result = await mdToWechatHtml(markdown);
console.log(result.html); // 可直接粘贴到公众号的 HTML
console.log(result.meta); // { wordCount: 10, readingTime: 1 }
import { mdToWechatHtml, type WechatFormatOptions } from '@synccaster/core';
const options: WechatFormatOptions = {
theme: 'grace', // 主题:default | grace | simple
primaryColor: '#1890ff', // 主题色
fontSize: '16px', // 字号
isUseIndent: true, // 首行缩进
isUseJustify: true, // 两端对齐
citeStatus: true, // 显示脚注引用
isMacCodeBlock: true, // Mac 风格代码块
author: '作者名', // 作者
};
const result = await mdToWechatHtml(markdown, options);
import { mdToWechatHtmlRaw } from '@synccaster/core';
const { html, css } = await mdToWechatHtmlRaw(markdown);
// html: 带 class 的 HTML
// css: 对应的 CSS 样式
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| theme | ‘default’ | ‘grace’ | ‘simple’ | ‘default’ | 主题名称 |
| primaryColor | string | ‘#3f51b5’ | 主题色 |
| fontFamily | string | 系统字体 | 字体 |
| fontSize | string | ‘15px’ | 字号 |
| isUseIndent | boolean | false | 首行缩进 |
| isUseJustify | boolean | false | 两端对齐 |
| citeStatus | boolean | true | 显示脚注引用 |
| countStatus | boolean | false | 显示阅读时间 |
| isMacCodeBlock | boolean | true | Mac 风格代码块 |
| isShowLineNumber | boolean | false | 显示行号 |
| legend | ‘alt’ | ‘title’ | ‘alt-title’ | ‘alt’ | 图片说明格式 |
| author | string | - | 作者名称 |
微信公众号适配器已集成格式化器:
import { wechatAdapter } from '@synccaster/adapters';
// 在 transform 中自动使用格式化器
const payload = await wechatAdapter.transform(post, {
config: {
theme: 'default',
primaryColor: '#3f51b5',
}
});
// payload.contentHtml 是格式化后的 HTML
PublishPreview.vue 组件支持微信公众号专用预览:
<PublishPreview
:title="post.title"
:content="post.body_md"
:selected-platforms="['wechat']"
:wechat-options="{
theme: 'default',
primaryColor: '#3f51b5',
}"
/>
fillAndPublish 方法按优先级尝试以下方式填充内容:
__MP_Editor_JSAPI__.invoke({ apiName: 'mp_editor_set_content' })ue.setContent(html)如果所有自动填充方式都失败,会将内容复制到剪贴板并提示用户手动粘贴。
微信公众号提供了官方的编辑器 JS API,参考文档:
主要使用的 API:
window.__MP_Editor_JSAPI__.invoke({
apiName: 'mp_editor_set_content',
apiParam: { content: htmlContent },
sucCb: (res) => { /* 成功回调 */ },
errCb: (err) => { /* 失败回调 */ }
});
微信公众号正在从 UEditor 迁移到 ProseMirror 编辑器。新版编辑器提供了官方 JS API,可以更可靠地设置内容。
如果遇到格式问题,建议:
<style> 标签,所以样式必须内联packages/core/src/wechat/ - 格式化器核心代码packages/adapters/src/wechat.ts - 微信适配器apps/extension/src/ui/options/components/PublishPreview.vue - 预览组件