Монорепозиторий для проекта Link Storage, построенный на основе pnpm workspaces.
link-storage/
├── apps/ # Приложения
│ ├── web/ # Веб-приложение (Next.js)
│ └── api/ # API сервер (NestJS + Prisma)
├── packages/ # Общие пакеты
│ ├── ui/ # UI компоненты
│ └── utils/ # Утилиты
├── tools/ # Инструменты и конфигурации
├── package.json # Корневой package.json
├── pnpm-workspace.yaml # Конфигурация workspaces
└── README.md
- Node.js >= 18.0.0
- pnpm >= 8.0.0
- Установите pnpm глобально (если еще не установлен):
npm install -g pnpm- Установите зависимости для всех пакетов:
pnpm install# Установка зависимостей для всех пакетов
pnpm install
# Сборка всех пакетов
pnpm build
# Запуск dev режима для всех пакетов
pnpm dev
# Запуск тестов для всех пакетов
pnpm test
# Линтинг всех пакетов
pnpm lint
# Очистка build артефактов
pnpm clean
# API специфичные команды
pnpm api:dev # Запуск API в режиме разработки
pnpm api:build # Сборка API
pnpm api:start # Запуск API в продакшене
pnpm api:prisma:generate # Генерация Prisma клиента
pnpm api:prisma:migrate # Применение миграций БД
pnpm api:prisma:push # Синхронизация схемы с БД
pnpm api:prisma:studio # Открытие Prisma Studio# Запуск команды в конкретном пакете
pnpm --filter @link-storage/web dev
pnpm --filter @link-storage/ui build
pnpm --filter @link-storage/utils test
# Добавление зависимости в конкретный пакет
pnpm --filter @link-storage/web add react-router-dom
pnpm --filter @link-storage/ui add -D @types/reactОсновное веб-приложение на Next.js.
Команды:
pnpm dev- запуск в режиме разработкиpnpm build- сборка для продакшенаpnpm start- запуск продакшен версии
API сервер на NestJS с Prisma ORM для работы с базой данных PostgreSQL.
Возможности:
- CRUD операции для ссылок
- Система тегов
- Поддержка пользователей
- Публичные и приватные ссылки
- Swagger документация
- PostgreSQL база данных
Команды:
pnpm start:dev- запуск в режиме разработкиpnpm build- сборка для продакшенаpnpm start:prod- запуск продакшен версииpnpm prisma:generate- генерация Prisma клиентаpnpm prisma:migrate- применение миграцийpnpm prisma:studio- открытие Prisma Studio
Эндпоинты:
GET /api/links- получить все ссылкиPOST /api/links- создать ссылкуGET /api/links/:id- получить ссылку по IDPATCH /api/links/:id- обновить ссылкуDELETE /api/links/:id- удалить ссылкуGET /api/links/public- получить публичные ссылкиGET /api/links/by-tags- найти ссылки по тегамGET /api/docs- Swagger документация
Библиотека переиспользуемых UI компонентов.
Экспортируемые компоненты:
Button- кнопка с различными вариантами стилизации
Общие утилиты и хелперы.
Экспортируемые функции:
isValidUrl(url: string)- проверка валидности URLextractDomain(url: string)- извлечение домена из URLformatUrlForDisplay(url: string)- форматирование URL для отображения
# В корневой package.json (dev зависимости)
pnpm add -D -w typescript
# В конкретный пакет
pnpm --filter @link-storage/web add axios
# Workspace зависимость (между пакетами в монорепе)
pnpm --filter @link-storage/web add @link-storage/ui@workspace:*# Из конкретного пакета
pnpm --filter @link-storage/web remove axios
# Из корня
pnpm remove -w typescript- Создайте директорию в
packages/илиapps/ - Добавьте
package.jsonс именем в формате@link-storage/package-name - Убедитесь, что пакет попадает под паттерны в
pnpm-workspace.yaml
Пакеты в монорепе могут ссылаться друг на друга через workspace:*:
{
"dependencies": {
"@link-storage/ui": "workspace:*",
"@link-storage/utils": "workspace:*"
}
}Для TypeScript пакетов рекомендуется:
- Компилировать в
dist/директорию - Экспортировать типы через
typesполе вpackage.json - Использовать
tscдля сборки
# Показать дерево зависимостей
pnpm list
# Показать устаревшие зависимости
pnpm outdated
# Обновить зависимости
pnpm update
# Запустить команду во всех пакетах
pnpm -r exec rm -rf dist
# Запустить команду только в пакетах с определенным скриптом
pnpm -r --filter="./packages/*" buildЕсли возникают проблемы с зависимостями:
# Очистить node_modules и переустановить
rm -rf node_modules packages/*/node_modules apps/*/node_modules
pnpm install
# Очистить pnpm store
pnpm store pruneУбедитесь, что:
- Все пакеты собраны (
pnpm build) - TypeScript конфигурация корректна
- Workspace зависимости указаны правильно