tradein/frontend: pnpm-lock.yaml никем не читается и врёт про состав зависимостей #2770

Closed
opened 2026-08-07 08:01:23 +00:00 by bot-backend · 0 comments
Collaborator

Найдено попутно в #2766 (PR #2769), НЕ чинилось.

tradein-mvp/frontend/pnpm-lock.yaml — 121 КБ, лежит в репозитории, и НИ ОДИН потребитель из него не ставит:

  • tradein-mvp/frontend/Dockerfile (deps stage): COPY package.json package-lock.json* + npm install --legacy-peer-deps — pnpm-лок в образ даже не копируется;
  • .forgejo/workflows/ci-tradein.yml (job frontend-checks): npm install --legacy-peer-deps --no-audit --no-fund;
  • больше нигде строки pnpm в репозитории нет — только в комментарии самого ci-tradein.yml («есть pnpm-lock.yaml, но Dockerfile ставит именно npm install»).

Последний раз файл трогали в #2312, и с тех пор package.json менялся мимо него; PR #2769 (devDeps под vitest) разошёлся с ним ещё сильнее. То есть это не лок, а снимок дерева, которое никто не собирает.

Почему это стоит закрыть, а не оставить. Файл выглядит как источник истины: pnpm install из него отработает и даст дерево, отличающееся от того, что уедет в прод-образ, — а расхождение обнаружится не при установке, а позже и не там. Плюс собственно причина, по которой у лэйна нет npm ci и кэша npm: лока, которому можно верить, нет.

Варианты (нужен выбор, а не оба сразу):

  1. Удалить pnpm-lock.yaml. Дёшево, и честно отражает текущее положение: установка не воспроизводима, версии плавают в пределах semver-диапазонов.
  2. Завести package-lock.json (npm install его уже порождает, он в .gitignore не попадал — просто не коммитился), перевести Dockerfile и CI на npm ci --legacy-peer-deps, включить cache: npm в setup-node. Тогда установка воспроизводима и лэйн быстрее. Ценой правила из .claude/rules/frontend.md: правишь package.json — регенерируй лок в том же PR, иначе npm ci роняет деплой.

По умолчанию разумнее (2) — у соседнего frontend/ ровно так и сделано (npm ci + tracked package-lock.json), и деплой tradein-фронта сейчас единственный, где состав зависимостей определяется датой сборки.

Найдено попутно в #2766 (PR #2769), НЕ чинилось. `tradein-mvp/frontend/pnpm-lock.yaml` — 121 КБ, лежит в репозитории, и НИ ОДИН потребитель из него не ставит: - `tradein-mvp/frontend/Dockerfile` (deps stage): `COPY package.json package-lock.json*` + `npm install --legacy-peer-deps` — pnpm-лок в образ даже не копируется; - `.forgejo/workflows/ci-tradein.yml` (job `frontend-checks`): `npm install --legacy-peer-deps --no-audit --no-fund`; - больше нигде строки `pnpm` в репозитории нет — только в комментарии самого ci-tradein.yml («есть pnpm-lock.yaml, но Dockerfile ставит именно npm install»). Последний раз файл трогали в #2312, и с тех пор `package.json` менялся мимо него; PR #2769 (devDeps под vitest) разошёлся с ним ещё сильнее. То есть это не лок, а снимок дерева, которое никто не собирает. **Почему это стоит закрыть, а не оставить.** Файл выглядит как источник истины: `pnpm install` из него отработает и даст дерево, отличающееся от того, что уедет в прод-образ, — а расхождение обнаружится не при установке, а позже и не там. Плюс собственно причина, по которой у лэйна нет `npm ci` и кэша npm: лока, которому можно верить, нет. **Варианты (нужен выбор, а не оба сразу):** 1. Удалить `pnpm-lock.yaml`. Дёшево, и честно отражает текущее положение: установка не воспроизводима, версии плавают в пределах semver-диапазонов. 2. Завести `package-lock.json` (`npm install` его уже порождает, он в .gitignore не попадал — просто не коммитился), перевести Dockerfile и CI на `npm ci --legacy-peer-deps`, включить `cache: npm` в setup-node. Тогда установка воспроизводима и лэйн быстрее. Ценой правила из `.claude/rules/frontend.md`: правишь `package.json` — регенерируй лок в том же PR, иначе `npm ci` роняет деплой. По умолчанию разумнее (2) — у соседнего `frontend/` ровно так и сделано (`npm ci` + tracked `package-lock.json`), и деплой tradein-фронта сейчас единственный, где состав зависимостей определяется датой сборки.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2770
No description provided.