diff --git a/.gitignore b/.gitignore index ad9d4d2..f0fa1a5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /backend/config/Config.cust.php /frontend/node_modules /frontend/dist +/dist diff --git a/build.bat b/build.bat new file mode 100644 index 0000000..f6ee3c1 --- /dev/null +++ b/build.bat @@ -0,0 +1,94 @@ +@echo off +setlocal EnableExtensions + +set "ROOT=%~dp0" +if "%ROOT:~-1%"=="\" set "ROOT=%ROOT:~0,-1%" + +set "DIST_DIR=%ROOT%\dist" +set "DIST_PUBLIC=%DIST_DIR%\public" +set "DIST_APP=%DIST_PUBLIC%" +set "FRONTEND_DIR=%ROOT%\frontend" +set "BACKEND_DIR=%ROOT%\backend" + +echo [1/6] Cleaning dist... +if exist "%DIST_DIR%" ( + rmdir /S /Q "%DIST_DIR%" + if exist "%DIST_DIR%" ( + echo ERROR: Failed to remove "%DIST_DIR%". + exit /b 1 + ) +) + +mkdir "%DIST_DIR%" >nul 2>&1 || ( + echo ERROR: Failed to create "%DIST_DIR%". + exit /b 1 +) + +echo [2/6] Building frontend... +pushd "%FRONTEND_DIR%" >nul 2>&1 || ( + echo ERROR: Frontend directory not found: "%FRONTEND_DIR%". + exit /b 1 +) + +echo - npm install +call npm install +if errorlevel 1 ( + popd >nul + echo ERROR: npm install failed. + exit /b 1 +) + +echo - npm run build +call npm run build +if errorlevel 1 ( + popd >nul + echo ERROR: npm run build failed. + exit /b 1 +) + +if not exist "%FRONTEND_DIR%\dist" ( + popd >nul + echo ERROR: Frontend build output not found at "%FRONTEND_DIR%\dist". + exit /b 1 +) + +popd >nul + +echo [3/6] Copy backend root to dist/... +call :RunRobocopy "%BACKEND_DIR%" "%DIST_DIR%" /E /R:2 /W:1 /NFL /NDL /NJH /NJS /NP ^ + /XD "%BACKEND_DIR%\.git" "%BACKEND_DIR%\.vscode" "%BACKEND_DIR%\tests" "%BACKEND_DIR%\node_modules" "%BACKEND_DIR%\frontend" "%BACKEND_DIR%\dist" ^ + /XF ".env" ".env.*" +if errorlevel 1 exit /b 1 + +echo [4/6] Copy frontend/dist to dist/public... +call :RunRobocopy "%FRONTEND_DIR%\dist" "%DIST_APP%" /E /R:2 /W:1 /NFL /NDL /NJH /NJS /NP +if errorlevel 1 exit /b 1 + +echo [5/6] Applying .env.production (if present)... +set "ENV_NOTE=No backend/.env.production found" +if exist "%BACKEND_DIR%\.env.production" ( + copy /Y "%BACKEND_DIR%\.env.production" "%DIST_DIR%\.env" >nul + if errorlevel 1 ( + echo ERROR: Failed to copy backend/.env.production to dist/.env. + exit /b 1 + ) + set "ENV_NOTE=Copied backend/.env.production to dist/.env" +) + +echo [6/6] Summary +echo - Frontend build: OK +echo - Backend root copied to: "%DIST_DIR%" (excluding excluded dirs) +echo - Frontend assets copied to: "%DIST_APP%" +echo - Env: %ENV_NOTE% +echo - DocumentRoot should be: "%DIST_PUBLIC%" +echo - Frontend app is served from: "%DIST_APP%" +echo DONE "%DIST_DIR%" +exit /b 0 + +:RunRobocopy +robocopy %* +if errorlevel 8 ( + echo ERROR: robocopy failed with exit code %ERRORLEVEL%. + exit /b 1 +) +exit /b 0 diff --git a/doc/prompt.txt b/doc/prompt.txt index d7b7bee..025a028 100644 --- a/doc/prompt.txt +++ b/doc/prompt.txt @@ -100,3 +100,66 @@ Layout: Výsledok: Čistý, konzistentný, moderný vzhľad bez prehnaných farieb. + + +----- 2026-02-14 13:35:31 ----------------------------------------------------- +V koreňovom adresári projektu vytvor Windows batch skript build.bat. + +Štruktúra projektu: +- frontend/ (Vue 3 + Vite) -> build do frontend/dist +- backend/ (PHP) -> web root je backend/public a PHP súbory v public používajú relatívne cesty typu ../src/Init.php + => Musíme zachovať štruktúru, aby v dist platilo: dist/public/.. = dist/ + +Cieľ: +- v koreňi vytvoriť root/dist tak, aby som na serveri nastavil DocumentRoot na dist/public +- relatívne cesty v PHP z dist/public na dist/src musia fungovať (napr. dist/public/index.php -> ../src/Init.php) +- frontend (Vite) nasadiť ako statické súbory do dist/public/app (aby nekolidoval s backend/public/index.php) + +Výsledná štruktúra dist: +- dist/public/ (WEB ROOT) = kópia backend/public +- dist/src/ = kópia backend/src +- dist/vendor/ = kópia backend/vendor (ak existuje) +- dist/config/ = kópia backend/config (ak existuje) +- dist/… = ostatné potrebné backend súbory/adresáre z backend/ (mimo public) +- dist/public/app/ = Vite build (obsah frontend/dist) + +Požiadavky na build.bat: + +1) Vyčistenie: +- ak existuje root/dist, zmaž ho celý +- vytvor root/dist + +2) Frontend build (nepoužívaj npm ci): +- cd frontend +- spusti "npm install" +- spusti "npm run build" +- ak build zlyhá, ukonči skript s exit code 1 +- vráť sa do root + +3) Kopírovanie backend do dist: +- skopíruj backend/public -> dist/public +- skopíruj všetko potrebné z backend/ do dist/ TAK, aby platili relatívne cesty z dist/public na dist/src atď. + Konkrétne: + - kopíruj backend/src -> dist/src (ak existuje) + - kopíruj backend/vendor -> dist/vendor (ak existuje) + - kopíruj ďalšie bežné backend adresáre (napr. config, templates, storage…) do dist/ na rovnakú úroveň ako public +- NEkopíruj backend/public druhýkrát mimo dist/public +- NEkopíruj: .git, .vscode, tests, node_modules, frontend, dist + +4) Skopírovanie Vite buildu do dist/public: +- vytvor dist/public +- skopíruj obsah frontend/dist -> dist/public + +5) .env: +- ak existuje backend/.env.production, skopíruj ho do dist/.env +- inak nič + +6) Robustnosť: +- použi robocopy na kopírovanie (rýchle a s exclude) +- kontroluj ERRORLEVEL po každom kritickom kroku a pri chybe ukonči skript s exit code 1 +- používaj echo logy (kroky + DONE) + +7) Výstup: +- na konci vypíš, že DocumentRoot má byť nastavený na dist/public a frontend je v dist/public + +Dodaj kompletný obsah súboru build.bat.