batchCooking/apps/api/package.json
kyuno053 4b988706cc
fix(docker): n'installe plus/ne build plus Cypress dans l'image de prod (#22)
- README : le dev local cible désormais `docker compose up -d postgres`
  explicitement. `docker-compose.yml` définit aussi le service `app`
  (celui que Portainer build en prod) — sans nom de service,
  `docker compose up -d` construisait et démarrait aussi ce conteneur en
  local, déclenchant un `pnpm install` sur tout le monorepo (donc le
  `cypress` d'apps/web, avec son téléchargement de binaire) pour une image
  dont le dev local n'a pas besoin.
- Dockerfile (apps/api) : `CYPRESS_INSTALL_BINARY=0` sur le stage `build`
  — évite le téléchargement du binaire Cypress (~200 Mo, Electron) à
  chaque build de l'image de prod, qu'il vienne de `docker compose` ou du
  pipeline de release. Le package `cypress` lui-même reste installé (vraie
  entrée du lockfile) ; `pnpm prune --prod` puis un wipe+reinstall complet
  ont été testés pour l'éliminer aussi, mais se sont révélés dangereux
  dans ce monorepo pnpm (prune ignore les node_modules des autres
  packages du workspace ; le wipe+reinstall a fait sauter le binding
  natif compilé d'argon2, crash silencieux au démarrage du conteneur) —
  pas justifié pour ~10 Mo de JS inerte une fois le téléchargement du
  binaire évité.
- apps/api/package.json : déplace `prisma` (le CLI, invoqué directement
  par le `CMD` du conteneur pour `migrate deploy`) de devDependencies
  vers dependencies — classification plus correcte indépendamment du
  point ci-dessus.

Vérifié par un vrai `docker build` + `docker run` contre un Postgres réel
(migrations, seed, démarrage du serveur, signup avec hash argon2 réel).
2026-08-19 09:45:04 +02:00

47 lines
1.3 KiB
JSON

{
"name": "api",
"version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "tsx watch src/server.ts",
"build": "tsc -p tsconfig.json",
"start": "node dist/server.js",
"test": "cross-env NODE_ENV=test mocha",
"test:bdd": "cross-env NODE_ENV=test NODE_OPTIONS=--import=tsx cucumber-js",
"prisma:generate": "prisma generate",
"prisma:migrate": "prisma migrate dev",
"prisma:seed": "prisma db seed",
"postinstall": "prisma generate"
},
"prisma": {
"seed": "tsx prisma/seed.ts"
},
"dependencies": {
"@batch-cooking/date-tools": "workspace:*",
"@batch-cooking/error-tools": "workspace:*",
"@batch-cooking/express-tools": "workspace:*",
"@batch-cooking/shared": "workspace:*",
"@prisma/client": "^5.22.0",
"argon2": "0.31.2",
"dotenv": "^16.4.5",
"express": "^4.21.1",
"jsonwebtoken": "^9.0.3",
"prisma": "^5.22.0",
"zod": "^3.23.8"
},
"devDependencies": {
"@cucumber/cucumber": "^13.2.1",
"@faker-js/faker": "^10.6.0",
"@types/express": "^4.17.21",
"@types/jsonwebtoken": "^9.0.10",
"@types/node": "^22.9.0",
"@types/supertest": "^6.0.2",
"chai": "^5.1.2",
"cross-env": "^10.1.0",
"mocha": "^10.8.2",
"supertest": "^7.0.0",
"tsx": "^4.19.2",
"typescript": "^5.7.2"
}
}