这是 Label Studio 的纯前端 Web 项目,基于 NX Monorepo 架构,使用 React + TypeScript 技术栈。项目已移除后端、Docker 等配置,专注于前端开发。
web/
├── apps/ # 应用层
│ ├── labelstudio/ # 主应用
│ ├── labelstudio-e2e/ # E2E 测试
│ └── playground/ # 独立演示应用
├── libs/ # 共享库
│ ├── editor/ # 标注编辑器核心
│ ├── datamanager/ # 数据管理器
│ ├── ui/ # UI 组件库
│ ├── core/ # 核心工具库
│ ├── app-common/ # 应用通用模块
│ ├── frontend-test/ # 测试工具库
│ └── storybook/ # Storybook 配置
├── tools/ # 构建工具
├── dist/ # 构建输出
└── 配置文件
apps/labelstudio - 主应用用途: Label Studio 的完整前端应用
特点:
dist/apps/labelstudio/启动命令:
yarn ls:dev # 开发模式(支持 HMR)
yarn ls:watch # 监听模式
yarn ls:build # 生产构建
apps/playground - 独立演示应用用途: 标注编辑器的独立测试和演示环境
特点:
启动命令:
yarn playground:serve # 开发服务器
yarn playground:build # 生产构建
apps/labelstudio-e2e - E2E 测试用途: 端到端测试套件
特点:
运行命令:
yarn ls:e2e # 运行 E2E 测试
libs/editor - 标注编辑器核心 ⭐功能: 数据标注的核心功能库
技术栈:
特点:
开发命令:
yarn lsf:watch # 监听构建
yarn lsf:serve # 独立运行
yarn lsf:unit # 单元测试
yarn lsf:integration # 集成测试
yarn lsf:e2e # E2E 测试
libs/datamanager - 数据管理器功能: 数据探索和管理工具
特点:
技术栈:
开发命令:
yarn dm:watch # 监听构建
yarn dm:unit # 单元测试
libs/ui - UI 组件库 ⭐功能: 共享的 UI 组件库
特点:
组件类型:
开发命令:
yarn ui:serve # 启动 Storybook
yarn design-tokens # 重新生成设计令牌
libs/core - 核心工具库功能: 跨应用的通用工具和类型定义
特点:
libs/app-common - 应用通用模块功能: 应用级别的共享代码
特点:
libs/frontend-test - 测试工具库功能: 测试辅助工具和 Helpers
特点:
libs/storybook - Storybook 配置功能: Storybook 的全局配置和插件
特点:
apps/labelstudio
├── libs/editor (标注编辑器)
├── libs/datamanager (数据管理)
├── libs/ui (UI 组件)
├── libs/core (核心工具)
└── libs/app-common (应用通用)
apps/playground
├── libs/editor (标注编辑器)
├── libs/ui (UI 组件)
└── libs/core (核心工具)
libs/app-common
├── libs/ui
├── libs/core
└── libs/editor
libs/datamanager
├── libs/ui
└── libs/core
libs/editor
├── libs/ui
└── libs/core
libs/ui
└── libs/core
依赖规则:
apps/ 可以导入任何 libs/libs/ 不能导入 apps/libs/app-common 可以导入其他 libs/libs/ 不能导入 libs/app-common# 1. 安装依赖
yarn install --frozen-lockfile
# 2. 启动主应用(开发模式)
yarn dev
# 或
yarn ls:dev
# 3. 启动 Storybook(UI 组件开发)
yarn ui:serve
# 4. 启动 Playground(编辑器测试)
yarn playground:serve
# 构建主应用
yarn build
# 或
yarn ls:build
# 构建 Playground
yarn playground:build
# 构建 Storybook
yarn storybook:build
# 运行所有单元测试
yarn test:unit
# 运行特定模块测试
yarn ls:unit # 主应用
yarn lsf:unit # 编辑器
yarn dm:unit # 数据管理器
# 运行集成测试
yarn lsf:integration
# 运行 E2E 测试
yarn test:e2e
yarn ls:e2e # 主应用 E2E
yarn lsf:e2e # 编辑器 E2E
# 测试覆盖率
yarn test:unit:coverage
# 代码检查和自动修复
yarn lint
# SCSS 检查和自动修复
yarn lint-scss
# 生成文档
yarn docs
nx.json: NX 工作区配置package.json: 项目依赖和脚本tsconfig.base.json: TypeScript 基础配置webpack.config.js: Webpack 构建配置tailwind.config.js: Tailwind CSS 配置biome.json: Biome 代码检查配置.stylelintrc.json: Stylelint 样式检查配置design-tokens.json: 从 Figma 导出的设计令牌components.json: Shadcn/ui 组件配置jest.config.ts: Jest 测试配置jest.preset.js: Jest 预设配置cypress.config.ts: Cypress E2E 测试配置Playground 应用 (完全独立)
Editor 库 (可嵌入)
UI 组件库 (完全独立)
# 使用 NX 生成器创建新应用
nx generate @nx/react:application my-app --style=scss --bundler=webpack
# 创建新的共享库
nx generate @nx/react:library my-lib --style=scss --unitTestRunner=jest
# 在 UI 库中添加新组件
nx generate @nx/react:component my-component --project=ui --style=scss
创建 .env 文件(可选):
# 启用热模块替换
FRONTEND_HMR=true
# HMR 服务器地址(默认: http://localhost:8010)
FRONTEND_HOSTNAME=http://localhost:8010
# Django 后端地址(默认: http://localhost:8080)
DJANGO_HOSTNAME=http://localhost:8080
参考 libs/datamanager/.env.example:
# API 网关地址
NX_API_GATEWAY=http://localhost:8080/api/dm
# Label Studio 访问令牌
LS_ACCESS_TOKEN=your_access_token
主应用需要配置后端 API 地址,通常通过环境变量或构建时配置。
使用 Playground 应用或将 @humansignal/editor 作为 npm 包引入你的项目。
在 libs/editor 中扩展标注工具和控件,参考现有实现。
修改 design-tokens.json 和 Tailwind 配置,重新生成设计令牌。
yarn test:unit # 所有单元测试
yarn test:integration # 集成测试
yarn test:e2e # E2E 测试
这是一个现代化的前端 Monorepo 项目,具有以下特点:
项目专注于前端开发,可以独立开发和测试,也可以与后端 API 集成使用。