核心用法
chart-image 是基于 Vega-Lite 的无头图表生成工具,通过 Node.js 脚本将 JSON 数据转换为 PNG/SVG 图像。支持命令行调用,典型工作流:
node chart.mjs --type line --data '[{"x":"A","y":10}]' --output chart.png支持的图表类型:线图、柱状图、面积图、散点图、饼图/环形图、K线蜡烛图、热力图、多序列对比、堆叠图、双Y轴叠加(如价格+成交量)。
关键特性:
- 无浏览器依赖:纯 Node.js 实现,对比 Puppeteer 方案减少 400MB+ 体积
- 预编译二进制:使用 Sharp 图像库,无需原生编译工具链
- 冷启动 <500ms:无 Chrome 启动延迟,适合 Serverless/Fly.io 场景
- 完全离线:零外部 API 调用,对比 QuickChart.io 等 SaaS 方案
显著优点
1. 部署友好:专为 Docker/VPS 设计,解决 node-canvas 常见的系统依赖地狱
2. 功能完整:覆盖金融 K 线、热力图、Sparkline 微图、时间序列、双轴组合等复杂场景
3. 输出灵活:内置社交媒体预设尺寸(Twitter/Bluesky/Instagram)、暗黑模式自动切换、自定义 d3-format 格式化
4. 监控优化:--show-change、--focus-recent、--show-values 等选项专为告警图表设计
潜在缺点/局限性
- 数据预处理依赖:仅接受 JSON 数组输入,无内置数据清洗/聚合能力
- 样式定制深度有限:复杂自定义需直接编辑 Vega-Lite spec(
--spec选项),门槛较高 - 无交互性:仅生成静态 PNG/SVG,不支持 tooltip、缩放等动态功能
- Node.js 绑定:非多语言方案,异构技术栈需额外封装
适合人群
- 运维/告警系统开发者:需要低延迟、离线生成监控图表的后端服务
- Fly.io/Docker 部署用户:追求最小镜像体积、零原生编译的容器化场景
- 量化/金融数据团队:需要 K 线、成交量叠加、时间序列标注等专业图表
- 社交媒体自动化:程序化生成固定尺寸图表用于 Bot 推送
常规风险
- 文件系统权限:输出目录需可写,建议使用
/data/clawd/tmp/而非系统/tmp - JSON 注入风险:
--data参数直接解析用户输入,需确保上游已做注入过滤 - 资源占用:大量并发生成时 Sharp 图像处理可能占用内存,建议队列限流
- 时区感知:
--dark自动模式基于以色列时区(UTC+2/+3),跨国部署需手动覆盖