- Настройка окружения
- Стандарты кодирования
- Тестирование
- Команды разработки ⭐ Полный справочник команд
- Справочник package.json 📋 Все 48 команд с описанием
- Линтинг и форматирование ⭐ Инструменты качества кода
- Управление версиями 📦 Централизованное управление версиями
- Внесение изменений
- Чеклист финализации модулей ✅ Критерии готовности модулей
- Прогресс финализации модулей 📊 Отслеживание прогресса
Это руководство предназначено для:
- Разработчиков, работающих над Timeline Studio
- Контрибьюторов open-source сообщества
- Тех, кто хочет расширить функциональность
# Клонирование и настройка
git clone https://github.com/your-org/timeline-studio.git
cd timeline-studio
bun install
# Настройка pre-commit hooks
bun run prepare
# Запуск в dev режиме
bun run tauri dev# Разработка
bun run dev # Frontend only (Next.js)
bun run tauri dev # Full app (Tauri)
bun run build # Build production
bun run tauri build # Build Tauri app
# Тестирование (4,158 тестов)
bun run test # Frontend tests (3,604)
bun run test:rust # Backend tests (554)
bun run test:e2e # E2E tests (Playwright)
bun run test:coverage # Coverage report
# Качество кода
bun run lint # ESLint + Stylelint + Clippy
bun run check:all # All checks + tests
bun run fix:all # Auto-fix all issuessrc/
├── features/ # Функциональные модули
│ └── feature-name/
│ ├── components/ # React компоненты
│ ├── hooks/ # Custom hooks
│ ├── services/ # Бизнес-логика
│ ├── types/ # TypeScript типы
│ └── __tests__/ # Тесты
│
├── components/ui/ # Общие UI компоненты
├── lib/ # Утилиты
└── test/ # Тестовые утилиты
src-tauri/
├── src/
│ ├── commands/ # Tauri команды
│ ├── media/ # Медиа обработка
│ ├── video_compiler/# Видео компиляция
│ └── recognition/ # ML функции
│
├── Cargo.toml # Rust зависимости
└── tauri.conf.json # Конфигурация
# Создание ветки
git checkout -b feature/new-feature
# Создание структуры модуля
mkdir -p src/features/new-feature/{components,hooks,services,types,__tests__}
# Добавление README
touch src/features/new-feature/README.md// src/features/new-feature/components/my-component.tsx
import { FC } from 'react'
import { cn } from '@/lib/utils'
interface MyComponentProps {
title: string
onAction: () => void
}
export const MyComponent: FC<MyComponentProps> = ({
title,
onAction
}) => {
return (
<div className={cn("my-component")}>
<h2>{title}</h2>
<button onClick={onAction}>Action</button>
</div>
)
}// src/features/new-feature/__tests__/my-component.test.tsx
import { describe, it, expect, vi } from 'vitest'
import { render, screen } from '@/test/test-utils'
import { MyComponent } from '../components/my-component'
describe('MyComponent', () => {
it('renders title', () => {
render(<MyComponent title="Test" onAction={() => {}} />)
expect(screen.getByText('Test')).toBeInTheDocument()
})
it('calls onAction when clicked', () => {
const onAction = vi.fn()
render(<MyComponent title="Test" onAction={onAction} />)
screen.getByRole('button').click()
expect(onAction).toHaveBeenCalled()
})
})- TypeScript: Strict mode, no
any - Покрытие тестами: Минимум 70%
- Документация: README для каждого модуля
- Производительность: < 16ms для рендера
# .github/workflows/ci.yml
- Linting (ESLint)
- Type checking (TypeScript)
- Unit tests (Vitest)
- E2E tests (Playwright)
- Build verification{
"recommendations": [
"rust-lang.rust-analyzer",
"tauri-apps.tauri-vscode",
"bradlc.vscode-tailwindcss",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode"
]
}- Откройте DevTools:
Cmd/Ctrl + Shift + I - Используйте React DevTools
- Просматривайте XState визуализацию
- Используйте
println!для логов - Запустите с
RUST_LOG=debug - Используйте
cargo testдля юнит-тестов
# Очистка кэша и переустановка
rm -rf node_modules bun.lock
bun install# Обновление зависимостей
cd src-tauri
cargo update
cargo clean
cargo build- Проверьте регистрацию команды в
main.rs - Убедитесь в правильности типов аргументов
- Проверьте имя команды (snake_case в Rust, camelCase в JS)
- Предпочитайте композицию наследованию
- Используйте маленькие, переиспользуемые компоненты
- Следуйте принципу единственной ответственности
- Локальное состояние для UI
- XState для сложной логики
- Context для глобального состояния
- Используйте
React.memoдля тяжелых компонентов - Применяйте
useMemoиuseCallback - Виртуализируйте длинные списки
- Всегда определяйте интерфейсы для props
- Используйте utility types TypeScript
- Избегайте
anyиunknown