dpline-task-manager

001. Тулчейн монорепы: pnpm workspaces (без Turborepo)

Дата: 2026-07-21
Статус: accepted
Связанные issues: #15, follow-up #10

Контекст

DPline — личный task-manager (Фаза 0). Нужна монорепа: apps/web (Vite+React+TS), apps/api (Node), позже packages/* для общих типов.

Ограничения:

Критерии выбора (упорядочены)

  1. Простой старт при малом объёме времени.
  2. Нормальная документация и встречаемость на рынке.
  3. Удобные workspaces (web + api из корня).
  4. Путь к CI (lint, typecheck) без переписывания всего.
  5. Не тащить лишнюю магию в день ноль.

Варианты

A. pnpm + workspaces + Turborepo

Плюсы: кэш задач, pipelines «как в индустрии».
Минусы: ещё один инструмент и кривая обучения; для двух apps на Фазе 0 — избыточно.

B. pnpm + workspaces без Turborepo ← выбрано

Плюсы: быстрые установки, строгие workspaces, минимум сущностей; скрипты в корневом package.json хватает для dev/build/lint.
Минусы: порядок скриптов и «кто от кого зависит» — вручную; turbo можно добавить позже без смены pnpm.

C. npm workspaces

Плюсы: уже с Node.
Минусы: слабее DX для монореп; реже целевой выбор для новых TS-монореп.

D. Yarn Berry

Минусы: лишняя сложность (PnP и т.д.) для текущего уровня практики.

E. Два репозитория

Отклонено: в plan/main.md зафиксирована монорепа.

Решение

pnpm (через Corepack, идёт с Node 20 LTS) + pnpm workspaces в одном репозитории. Turborepo на Фазе 0 не используем.

Версия Node для проекта: 20.x LTS (локально проверено: v20.18.0).
Версия pnpm: 9.15.9 (не 11.x — pnpm 11 требует Node ≥22).

Spike 2026-07-21: /tmp/pnpm-spikepnpm-workspace.yaml + apps/web + apps/api, pnpm install и pnpm -r list успешны.

Последствия

Плюсы

Минусы и долги

Follow-up для #10 (чеклист)

Отклонённое (чтобы не поднимать снова)