Skip to content

Senthie/Leafer-Flow

Repository files navigation

Leafer-Flow

一个基于LeaferJS构建的高性能工作流可视化工具库。

特性

  • 🚀 基于LeaferJS的高性能渲染
  • 📦 TypeScript支持,完整的类型定义
  • 🎯 模块化架构,易于扩展
  • 🔧 完整的节点和连接管理
  • 🎨 可自定义的节点和连接样式
  • 📱 支持拖拽、缩放、平移等交互
  • 💾 数据序列化和反序列化
  • 🧪 基于属性的测试保证代码质量
  • ⚡ 性能优化,支持大规模工作流
  • 🔄 撤销/重做功能
  • 🎛️ 丰富的事件系统

重要:包管理器要求

⚠️ 强制要求: 本项目必须使用 pnpm 作为包管理器。使用其他包管理器(npm、yarn)可能导致依赖问题和性能下降。

安装 pnpm

如果您还没有安装 pnpm,请选择以下方式之一:

# 方式 1: 使用 npm 安装
npm install -g pnpm

# 方式 2: 使用 curl (Linux/macOS)
curl -fsSL https://get.pnpm.io/install.sh | sh -

# 方式 3: 使用 PowerShell (Windows)
iwr https://get.pnpm.io/install.ps1 -useb | iex

# 方式 4: 使用 Homebrew (macOS)
brew install pnpm

验证安装

pnpm --version
# 应该显示版本号,如: 8.10.0

为什么必须使用 pnpm?

  1. 性能优势: pnpm 比 npm 快 2-3 倍,比 yarn 快 1.5-2 倍
  2. 磁盘空间: 通过硬链接和符号链接节省高达 50% 的磁盘空间
  3. 依赖管理: 更严格的依赖管理,避免幽灵依赖问题
  4. 项目配置: 本项目的构建脚本和配置专门为 pnpm 优化

安装

# 安装 Leafer-Flow
pnpm add leafer-flow

# 或者安装开发版本
pnpm add leafer-flow@latest

快速开始

import { FlowEditor } from 'leafer-flow';

// 创建编辑器实例
const container = document.getElementById('flow-container');
const editor = new FlowEditor(container, {
  width: 800,
  height: 600,
  background: '#f5f5f5',
  grid: true
});

// 添加节点
const node = editor.addNode({
  id: 'node-1',
  type: 'default',
  position: { x: 100, y: 100 },
  data: { label: '开始节点' },
  ports: [
    { id: 'output', type: 'output', position: 'right' }
  ]
});

// 添加连接
const edge = editor.addEdge({
  id: 'edge-1',
  source: 'node-1',
  sourcePort: 'output',
  target: 'node-2',
  targetPort: 'input'
});

开发

环境设置

# 克隆项目
git clone <repository-url>
cd leafer-flow

# 安装依赖 (必须使用 pnpm)
pnpm install

# 验证安装
pnpm run build
pnpm run test

开发命令

# 开发模式 (监听文件变化)
pnpm dev

# 运行测试
pnpm test

# 监听模式运行测试
pnpm test:watch

# 运行属性测试
pnpm test:properties

# 构建项目
pnpm build

# 代码检查
pnpm lint

# 自动修复代码风格
pnpm lint:fix

# 测试覆盖率
pnpm test:coverage

# 清理构建文件
pnpm clean

项目脚本说明

  • pnpm dev: 启动 TypeScript 编译器的监听模式
  • pnpm test: 运行所有测试(单元测试 + 属性测试)
  • pnpm test:properties: 专门运行属性测试
  • pnpm build: 编译 TypeScript 代码到 dist 目录
  • pnpm lint: 检查代码风格和潜在问题

文档

完整文档

示例代码

架构

Leafer-Flow采用模块化架构设计:

核心组件

  • FlowEditor: 主编辑器类,协调所有子系统
  • NodeManager: 节点管理器,处理节点的增删改查
  • EdgeManager: 连接管理器,处理连接线的管理
  • InteractionSystem: 交互系统,处理用户交互(拖拽、选择等)
  • EventSystem: 事件系统,提供完整的事件机制
  • ViewportManager: 视图管理器,处理缩放和平移
  • SerializationManager: 序列化管理器,处理数据的保存和加载

渲染组件

  • NodeRenderer: 节点渲染器,支持自定义节点样式
  • EdgeRenderer: 连接线渲染器,支持多种连接线类型
  • PerformanceSystem: 性能系统,优化大规模工作流渲染
  • HistorySystem: 历史系统,提供撤销/重做功能

性能特性

  • 🎯 虚拟化渲染: 只渲染可见区域的元素
  • 📊 细节层次 (LOD): 根据缩放级别调整渲染细节
  • 🔄 批量操作: 高效处理大量节点的创建和更新
  • 💾 对象池化: 减少垃圾回收压力
  • 智能重绘: 只重绘变化的区域
  • 📈 性能监控: 实时监控渲染性能和内存使用

贡献指南

开发环境要求

  • Node.js >= 16.0.0
  • pnpm >= 8.0.0 (必须)
  • TypeScript >= 5.0.0

贡献流程

  1. Fork 项目
  2. 创建功能分支: git checkout -b feature/amazing-feature
  3. 使用 pnpm 安装依赖: pnpm install
  4. 进行开发并确保测试通过: pnpm test
  5. 提交更改: git commit -m 'Add amazing feature'
  6. 推送分支: git push origin feature/amazing-feature
  7. 创建 Pull Request

代码规范

  • 使用 TypeScript 进行开发
  • 遵循 ESLint 配置的代码风格
  • 为新功能编写单元测试和属性测试
  • 更新相关文档

许可证

MIT License - 详见 LICENSE 文件

支持

如果您在使用过程中遇到问题或有改进建议:


记住: 始终使用 pnpm 作为包管理器以获得最佳的开发体验和性能!

About

基于LeaferJS所编写的Flow功能

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages