added Windows batch script for build /dist for distribution of project to server
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@
|
||||
/backend/config/Config.cust.php
|
||||
/frontend/node_modules
|
||||
/frontend/dist
|
||||
/dist
|
||||
|
||||
94
build.bat
Normal file
94
build.bat
Normal file
@ -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
|
||||
@ -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.
|
||||
|
||||
Reference in New Issue
Block a user