[@ant] fix(boot): мерджить factory/cooptypes deps в boot pkg.json + failOnWarn:false

Inline workspace-deps cooptypes/factory тянет в bundle их транзитивные
npm-зависимости (factory: handlebars, ajv, mongodb, nunjucks, pdf-lib,
moment-timezone, uuid, json-schema, inline-css). unbuild warning'ит
эти как "implicit external" и при failOnWarn:true роняет билд.

Фикс:
- build.config: failOnWarn:false — warnings допустимы
- Dockerfile: после build мерджим factory.deps + cooptypes.deps в
  boot/package.json. Boot.deps побеждают в случае коллизии. Так
  npm install --omit=dev в runtime поставит всё что транзитивно
  нужно для inlined factory кода.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
coopops
2026-05-01 09:39:06 +00:00
parent ef951b9291
commit 8607840581
2 changed files with 17 additions and 6 deletions
+11 -6
View File
@@ -41,13 +41,18 @@ RUN pnpm install --frozen-lockfile --filter "@coopenomics/boot..."
# свой bundle с inlined workspace-deps.
RUN pnpm --filter "@coopenomics/boot..." build
# Workspace-deps уже в bundle — выкидываем их из package.json,
# чтобы npm install в runtime не падал на "workspace:*" specifier.
# Workspace-deps inline'ятся в bundle, но их транзитивные npm-deps
# (factory тащит handlebars/ajv/mongodb/..., cooptypes пуст) остаются
# external — нужны в финальном node_modules. Мерджим их в boot.deps
# и удаляем сами workspace-spec'и (npm install не понимает workspace:*).
RUN node -e "const fs=require('fs'); \
const p=JSON.parse(fs.readFileSync('components/boot/package.json','utf8')); \
delete p.dependencies['cooptypes']; \
delete p.dependencies['@coopenomics/factory']; \
fs.writeFileSync('components/boot/package.json', JSON.stringify(p, null, 2));"
const boot=JSON.parse(fs.readFileSync('components/boot/package.json','utf8')); \
const factory=JSON.parse(fs.readFileSync('components/factory/package.json','utf8')); \
const cooptypes=JSON.parse(fs.readFileSync('components/cooptypes/package.json','utf8')); \
boot.dependencies = { ...factory.dependencies, ...cooptypes.dependencies, ...boot.dependencies }; \
delete boot.dependencies['cooptypes']; \
delete boot.dependencies['@coopenomics/factory']; \
fs.writeFileSync('components/boot/package.json', JSON.stringify(boot, null, 2));"
# ─── Stage 2: contracts ───────────────────────────────────────────────
FROM dicoop/contracts:${CONTRACTS_TAG} AS contracts
+6
View File
@@ -17,6 +17,12 @@ export default defineBuildConfig({
],
declaration: true,
clean: true,
// Inline workspace-deps тянет в граф транзитивные npm-deps factory'а
// (mongodb, handlebars, ajv, ...). unbuild на них warning'ит как
// "implicit external" — они корректно остаются external (мы их
// мерджим в boot/package.json в Dockerfile), но warning по умолчанию
// делает failOnWarn:true → нужно явно отключить.
failOnWarn: false,
rollup: {
emitCJS: true,
},