名称: Excalidraw 流程图
slug: excalidraw-flowchart
版本: 1.1.0
描述: 根据描述创建 Excalidraw 流程图。当用户要求“创建流程图”、“绘制图表”、“可视化流程”、“制作流程图”、“架构图”或讨论工作流/流程可视化时使用。支持 DSL、DOT/Graphviz 和 JSON 格式。
repo: https://github.com/swiftlysingh/excalidraw-skill
创建专业的流程图和图表,生成可在 Excalidraw 中打开的 .excalidraw 文件。
必须安装 @swiftlysingh/excalidraw-cli 工具:
npm install -g @swiftlysingh/excalidraw-cli
或者使用 npx(无需安装):
npx @swiftlysingh/excalidraw-cli create --inline "DSL" -o output.excalidraw
从用户描述中识别:
- 主要步骤/节点是什么?
- 决策点在哪里?
- 流程方向如何?
- 是否存在循环或分支?
使用以下 DSL 语法描述流程图:
| 语法 | 元素 | 用途 |
|---|---|---|
[标签] |
矩形 | 处理步骤、操作 |
{标签?} |
菱形 | 决策、条件判断 |
(标签) |
椭圆 | 开始/结束点 |
[[标签]] |
数据库 | 数据存储 |
![路径] |
图片 | 内嵌图片 |
 |
尺寸图片 | 指定尺寸的图片 |
-> |
箭头 | 连接线 |
-> "文本" -> |
带标签的箭头 | 带标签的连接线 |
--> |
虚线箭头 | 可选/备用路径 |
| 指令 | 描述 | 示例 |
|---|---|---|
@direction |
设置流程方向 | @direction LR |
@spacing |
设置节点间距 | @spacing 60 |
@image |
定位图片 | @image logo.png at 100,50 |
@decorate |
为节点附加装饰 | @decorate icon.png top-right |
@sticker |
从库中添加贴纸 | @sticker checkmark at 200,100 |
@library |
设置贴纸库路径 | @library ./assets/stickers |
@scatter |
在画布上散布图片 | @scatter star.png count:5 |
运行 CLI 命令创建 .excalidraw 文件:
npx @swiftlysingh/excalidraw-cli create --inline "你的DSL内容" -o flowchart.excalidraw
对于多行 DSL,可以使用 heredoc:
npx @swiftlysingh/excalidraw-cli create --inline "$(cat <<'EOF'
(开始) -> [步骤 1] -> {决策?}
{决策?} -> "是" -> [步骤 2] -> (结束)
{决策?} -> "否" -> [步骤 3] -> [步骤 1]
EOF
)" -o flowchart.excalidraw
告知用户:
1. 文件已在指定路径创建
2. 可在 Excalidraw (https://excalidraw.com) 中通过“文件 > 打开”打开
3. 如有需要,可在 Excalidraw 中进一步编辑
(开始) -> [初始化] -> [处理数据] -> [保存结果] -> (结束)
(开始) -> [接收请求] -> {已认证?}
{已认证?} -> "是" -> [处理请求] -> (成功)
{已认证?} -> "否" -> [返回 401] -> (结束)
(开始) -> [尝试操作] -> {成功?}
{成功?} -> "是" -> [继续] -> (结束)
{成功?} -> "否" -> {重试次数 < 3?}
{重试次数 < 3?} -> "是" -> [增加计数器] -> [尝试操作]
{重试次数 < 3?} -> "否" -> [记录失败] -> (错误)
(用户输入) -> {输入类型?}
{输入类型?} -> "文本" -> [解析文本] -> [处理]
{输入类型?} -> "文件" -> [读取文件] -> [处理]
{输入类型?} -> "URL" -> [获取 URL] -> [处理]
[处理] -> [输出结果] -> (完成)
[API 请求] -> {缓存命中?}
{缓存命中?} -> "是" -> [[读取缓存]] -> [返回数据]
{缓存命中?} -> "否" -> [[查询数据库]] -> [[更新缓存]] -> [返回数据]
-o, --output <文件> - 输出文件路径(默认:flowchart.excalidraw)-f, --format <类型> - 输入格式:dsl、json、dot(默认:自动检测)-d, --direction <TB|BT|LR|RL> - 流程方向(默认:TB,从上到下)-s, --spacing <数字> - 节点间距(像素,默认:50)--inline <dsl> - 内联 DSL/DOT 字符串--stdin - 从标准输入读取--verbose - 详细输出带选项的示例:
npx @swiftlysingh/excalidraw-cli create --inline "[A] -> [B] -> [C]" --direction LR --spacing 80 -o horizontal-flow.excalidraw
CLI 现已支持 DOT/Graphviz 格式创建图表。这对于处理现有的 DOT 文件或偏好 DOT 语法非常有用。
digraph {
rankdir=LR
start [shape=ellipse label="开始"]
process [shape=box label="处理数据"]
decision [shape=diamond label="有效?"]
end [shape=ellipse label="结束"]
start -> process
process -> decision
decision -> end [label="是"]
decision -> process [label="否" style=dashed]
}
| 特性 | DOT 语法 | 映射到 |
|---|---|---|
| 矩形 | shape=box 或 shape=rect |
[标签] |
| 菱形 | shape=diamond |
{标签} |
| 椭圆 | shape=ellipse 或 shape=circle |
(标签) |
| 数据库 | shape=cylinder |
[[标签]] |
| 方向 | rankdir=TB\|BT\|LR\|RL |
@direction |
| 边标签 | [label="文本"] |
-> "文本" -> |
| 虚线边 | [style=dashed] |
--> |
| 颜色 | [fillcolor="..." color="..."] |
节点样式 |
# 从文件(通过 .dot 或 .gv 扩展名自动检测)
npx @swiftlysingh/excalidraw-cli create diagram.dot -o output.excalidraw
# 内联 DOT
npx @swiftlysingh/excalidraw-cli create --format dot --inline "digraph { A -> B -> C }" -o output.excalidraw
将图片作为流程元素包含:
(开始) ->  -> [处理] -> (结束)
将图片放置在特定位置:
@image background.png at 0,0
@image logo.png near (开始) top-right
(开始) -> [处理] -> (结束)
为节点附加小图标/徽章:
[部署到生产环境]
@decorate checkmark.png top-right
[需要审核]
@decorate warning.png top-left
装饰锚点:top、bottom、left、right、top-left、top-right、bottom-left、bottom-right
使用可重复使用的贴纸库:
@library ./assets/stickers
@sticker success at 100,100
@sticker warning near (错误) top-right
在画布上随机分布图片:
@scatter confetti.png count:10
@scatter star.png count:5 width:20 height:20
[客户端请求] -> [API 网关] -> {认证有效?}
{认证有效?} -> "是" -> [路由到服务] -> [[数据库]] -> [响应]
{认证有效?} -> "否" -> [401 未授权]
(推送) -> [构建] -> [测试] -> {测试通过?}
{测试通过?} -> "是" -> [部署到预发布] -> {手动批准?}
{手动批准?} -> "是" -> [部署到生产] -> (完成)
{手动批准?} -> "否" -> (已取消)
{测试通过?} -> "否" -> [通知团队] -> (失败)
(开始) -> [输入详情] -> {邮箱有效?}
{邮箱有效?} -> "否" -> [显示错误] -> [输入详情]
{邮箱有效?} -> "是" -> {密码强度足够?}
{密码强度足够?} -> "否" -> [显示密码要求] -> [输入详情]
{密码强度足够?} -> "是" -> [[保存到数据库]] -> [发送验证邮件] -> (成功)