核心用法
chart-image 是一款专为服务器环境设计的图表生成工具,基于Vega-Lite和Sharp图像处理库,可将JSON数据转换为高质量的PNG/SVG图表。核心使用方式为命令行调用:
node chart.mjs --type <图表类型> --data '[JSON数组]' --output <文件路径>
支持10种图表类型:线图(line)、柱状图(bar)、面积图(area)、散点图(point)、饼图(pie)、环形图(donut)、K线图(candlestick)、热力图(heatmap),以及多系列图、堆叠图、双轴组合图等专业形态。
显著优点
| 特性 | 说明 |
|------|------|
| **零浏览器依赖** | 纯Node.js实现,无需Puppeteer/Chrome,告别400MB+依赖包 |
| **预编译二进制** | 使用Sharp替代node-canvas,无需GCC等编译工具链 |
| **极速冷启动** | <500ms生成图表,无浏览器启动延迟 |
| **完全离线** | 零外部API调用,内网/VPN环境可用 |
| **轻量部署** | ~15MB总依赖,适合Fly.io/VPS/Docker |
高级功能
- 智能格式化:内置
percent/dollar/compact/decimal4等数值格式 - 时间序列支持:
--x-type temporal正确处理日期间隔 - 告警优化:
--show-change/--focus-recent/--dark专为监控场景设计 - 社交媒体预设:
--output-size bluesky/portrait/twitter一键适配平台尺寸 - 双轴叠加:价格线+成交量柱、收入柱+流失率面积等组合图表
潜在局限性
1. 静态输出:仅生成图片文件,无交互功能(hover提示、缩放、筛选)
2. 数据规模:未明确标注大数据量性能阈值,超大数据集建议预聚合
3. 样式定制:依赖Vega-Lite语法,复杂自定义需通过--spec传入完整配置
4. 实时更新:无内置数据源连接,需外部调度触发重新生成
适合人群
- DevOps/SRE:服务器监控告警图、资源趋势可视化
- 数据工程师:ETL管道中的自动报表生成
- 加密货币/金融开发者:K线图、价格追踪、交易量分析
- 社交媒体运营:定时生成数据卡片、趋势图分享
- Serverless开发者:需要极小冷启动延迟的边缘部署场景
常规风险
| 风险类型 | 说明 | 缓解措施 |
|----------|------|----------|
| **路径注入** | `--output`参数若接用户输入可能导致任意文件写入 | 验证/白名单输出路径,使用`/data/clawd/tmp/`隔离 |
| **JSON解析** | `--data`/`--annotations`直接解析用户输入 | 需上游做JSON Schema验证,防范原型链污染 |
| **资源消耗** | 高频生成大图可能占用CPU/内存 | 设置并发限制,监控Sharp进程内存 |
| **时区歧义** | 自动`--dark`模式依赖"Israel time" | 明确文档时区行为,或强制显式指定主题 |
部署建议
# 一次性安装(Docker/Fly.io构建阶段执行) cd /data/clawd/skills/chart-image/scripts && npm install # 典型调用 node chart.mjs --type candlestick --data '[...]' --dark \ --show-change --focus-recent 24 --output /data/clawd/tmp/alert.png
生成后务必通过消息工具发送图片,而非仅保存文件。