RAB 是一个专业的 monorepo 项目,为现代前端应用提供高质量的响应式状态管理解决方案。核心产品包括观察者库、服务容器和React 集成方案,为前端应用开发提供坚实的基础。
- 🎯 响应式观察者 - 高效的观察者模式实现,支持细粒度追踪
- 🔌 服务容器 - 灵活的服务管理容器,支持装饰器和依赖注入
- ⚛️ React 集成 - 与 React 深度集成的状态管理方案
- 📦 Monorepo 管理 - 基于 pnpm + Turborepo 的高效包管理
- 🎯 TypeScript 优先 - 完整的类型安全和开发体验
- 🧪 高质量测试 - Jest 测试框架,完整的测试覆盖
- 📚 完整文档 - 详细的 API 文档和使用指南
rab/
├── packages/ # 📦 核心包
│ ├── observer/ # 观察者库 (@rabjs/observer)
│ ├── service/ # 服务容器 (@rabjs/service)
│ └── react/ # React 集成 (@rabjs/react)
├── examples/ # 📚 示例项目
│ └── reactive-state/ # 响应式状态示例应用
├── configs/ # ⚙️ 共享配置
│ ├── eslint-config-custom/ # ESLint 规则
│ └── tsconfig/ # TypeScript 配置
├── website/ # 📖 文档网站
└── scripts/ # 🔧 构建和发布脚本
- Node.js: >= 20.19.0
- pnpm: 10.22.0
- Git: 任意版本
# 克隆仓库
git clone <repository-url>
cd rab
# 安装依赖
pnpm install# 启动所有包的开发模式
pnpm dev
# 仅开发示例应用
cd examples/reactive-state && pnpm dev# 构建所有包
pnpm build
# 清理构建产物
pnpm clean高效的观察者模式实现,提供细粒度的响应式追踪和自动更新机制。
主要特性:
- 细粒度响应式追踪
- 自动依赖收集
- 高性能更新机制
- 完整的 TypeScript 支持
- 内存泄漏防护
使用示例:
import { observable, observer } from '@rabjs/observer';
const state = observable({ count: 0 });
const dispose = observer(() => {
console.log('Count:', state.count);
});
state.count = 5; // 自动触发观察者
dispose(); // 清理观察者灵活的服务管理容器,支持装饰器、依赖注入和生命周期管理。
主要特性:
- 装饰器支持(@Injectable、@Inject 等)
- 类型安全的依赖注入
- 生命周期管理
- 事件系统集成
- 循环依赖检测
使用示例:
import { Injectable, Inject, Container } from '@rabjs/service';
@Injectable()
class UserService {
getUser(id: number) {
return { id, name: 'User' };
}
}
@Injectable()
class UserController {
constructor(@Inject(UserService) private userService: UserService) {}
getUser(id: number) {
return this.userService.getUser(id);
}
}
const container = new Container();
container.register(UserService);
container.register(UserController);
const controller = container.get(UserController);与 React 深度集成的状态管理方案,提供 Hooks 和组件级别的状态管理。
主要特性:
- React Hooks 支持(useObserver、useLocalObservable 等)
- 自动组件更新
- 性能优化
- 服务容器集成
- 开发者工具支持
使用示例:
import { useLocalObservable, observer } from '@rabjs/react';
const Counter = observer(() => {
const state = useLocalObservable(() => ({
count: 0,
increment() {
this.count++;
}
}));
return (
<div>
<p>Count: {state.count}</p>
<button onClick={() => state.increment()}>Increment</button>
</div>
);
});- 覆盖率: 最低 80% (分支、函数、行、语句)
- 测试框架: Jest + ts-jest
- 测试超时: 30 秒
- CI/CD: 自动化测试和发布
# 运行所有测试
pnpm test
# 使用 Turbo 并行测试
pnpm test:turbo
# 监听模式
cd packages/observer && npm run test:watch
# 覆盖率报告
cd packages/observer && npm run test:coverage本项目使用 Changesets 进行版本管理:
# 1. 创建变更集
pnpm changeset
# 2. 版本升级
pnpm version-packages
# 3. 发布检查
pnpm publish:check
# 4. 发布到 mnpm
pnpm publish:mnmp
# 5. 提交代码
git push origin <branch>- Access: public
- License: MIT
# 开发
pnpm dev # 启动所有包的开发模式
# 构建
pnpm build # 构建所有包
pnpm clean # 清理构建产物
pnpm clean:node-modules # 删除所有 node_modules
# 代码质量
pnpm lint # 代码检查
pnpm lint:turbo # 使用 Turbo 并行检查
pnpm lint:fix # 自动修复
pnpm lint:error # 仅显示错误
pnpm lint:error:fix # 修复错误
pnpm format # 代码格式化
# 测试
pnpm test # 运行测试
pnpm test:turbo # 使用 Turbo 并行测试
# 版本管理
pnpm changeset # 创建变更集
pnpm version-packages # 版本升级
pnpm publish:check # 发布检查
pnpm publish:mnmp # 发布到 mnpm# 进入特定包目录进行开发
cd packages/observer && npm run dev # 开发模式
cd packages/observer && npm run build # 构建
cd packages/observer && npm run test # 测试
cd packages/observer && npm run test:watch # 监听模式- 严格模式: 启用所有严格检查
strict: truenoImplicitAny: truestrictNullChecks: truenoImplicitReturns: truenoUncheckedIndexedAccess: true
- Linter: ESLint 9.17.0
- Formatter: Prettier 2.8.8
- 提交规范: Conventional Commits
- Git Hooks: Husky 9.1.7 + lint-staged 16.2.6
- 类型安全: 优先使用 TypeScript,避免
any类型 - 测试覆盖: 新功能必须包含测试,保持 80% 覆盖率
- 代码风格: 遵循 ESLint 和 Prettier 配置
- 提交规范: 使用 Conventional Commits
- 文档更新: 重要变更需要更新相关文档
# 1. 创建功能分支
git checkout -b feature/new-feature
# 2. 开发和测试
pnpm dev
pnpm test
# 3. 代码检查和格式化
pnpm lint:fix
pnpm format
# 4. 提交代码
git add .
git commit -m "feat: add new feature"
# 5. 创建变更集
pnpm changeset
# 6. 提交 PR
git push origin feature/new-feature@rabjs/observer (观察者库)
↓
@rabjs/service (服务容器)
↓
@rabjs/react (React 集成)
package.json- Monorepo 脚本和依赖turbo.json- Turborepo 任务配置pnpm-workspace.yaml- 工作区定义tsconfig.json- 根 TypeScript 配置eslint.config.js- ESLint 规则
package.json- 包信息和脚本tsconfig.json- 包特定的 TypeScript 配置jest.config.js- 测试配置build.config.ts- 构建配置
- 并行构建: Turborepo 自动并行化依赖构建
- 增量构建: 智能缓存和依赖分析
- 按需加载: 包按需加载和初始化
- 优化输出: 支持 CJS、ESM 和 TypeScript 类型
- 快速启动: 秒级开发服务器启动
- 监听模式: 自动重新构建
- 错误隔离: 包错误不影响其他包
- 类型提示: 完整的 TypeScript 智能提示
- ✅ @rabjs/observer - 观察者库
- ✅ @rabjs/service - 服务容器
- ✅ @rabjs/react - React 集成方案
- 📖 各包目录下的 README.md
- 📋 API 文档和使用示例
- 🔍 源代码注释和类型定义
- 📚 完整的文档网站(website 目录)
MIT License - 详见 LICENSE 文件
- Issues: 提交问题和建议
- 讨论: 参与项目讨论
- 文档: 查看各包的 README 和文档
- 示例: 查看 examples/reactive-state 目录