78 lines
3.5 KiB
Batchfile
78 lines
3.5 KiB
Batchfile
@echo off
|
|
rem ==================================================================
|
|
rem BUILD FOR DEPLOYMENT - run on the DEVELOPMENT machine.
|
|
rem
|
|
rem Produces a dist\ folder containing ONLY what the server needs:
|
|
rem dist\server.js whole backend bundled + minified (1 file,
|
|
rem no readable source, no node_modules needed)
|
|
rem dist\public\ frontend (browsers download this anyway)
|
|
rem dist\deploy\ the run/install scripts
|
|
rem dist\SapDiConsole\..\SapDiConsole.exe + interop (DI API)
|
|
rem dist\sap-di-pr.ps1, dist\logo.png etc.
|
|
rem
|
|
rem COPY THE dist\ CONTENTS to the server as the app folder, add the
|
|
rem .env there manually (never ships with the build), done.
|
|
rem
|
|
rem NOTE: pdfkit also has a second, rarely-hit fallback path for its ICC
|
|
rem color profile at "<app folder>\..\color_profiles\sRGB_IEC61966_2_1.icc"
|
|
rem - i.e. OUTSIDE the app folder entirely, a sibling of it on the server.
|
|
rem This script can't produce that (it only ever writes inside dist\), so
|
|
rem if a future ENOENT ever names that path, copy dist\data\
|
|
rem sRGB_IEC61966_2_1.icc to a "color_profiles" folder next to the server's
|
|
rem app folder (not inside it) by hand.
|
|
rem ==================================================================
|
|
cd /d "%~dp0.."
|
|
|
|
echo [1/4] Bundling backend with esbuild...
|
|
if exist dist rmdir /s /q dist
|
|
mkdir dist
|
|
call npx esbuild server.js --bundle --platform=node --target=node18 --minify --outfile=dist\server.js --log-level=warning
|
|
if %ERRORLEVEL% NEQ 0 (
|
|
echo BUILD FAILED - see errors above.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
echo [2/4] Copying frontend + assets...
|
|
xcopy /e /i /q /y public dist\public >nul
|
|
if exist logo.png copy /y logo.png dist\ >nul
|
|
|
|
rem esbuild only inlines JS - pdfkit/fontkit load these binary data files at
|
|
rem runtime via __dirname-relative fs.readFileSync() calls, so they must sit
|
|
rem next to dist\server.js or "Download PDF" fails with ENOENT (data.trie,
|
|
rem then Helvetica-Bold.afm, etc. - found the hard way, see chat history).
|
|
mkdir dist\data 2>nul
|
|
copy /y node_modules\@foliojs-fork\fontkit\data.trie dist\ >nul
|
|
copy /y node_modules\@foliojs-fork\fontkit\indic.trie dist\ >nul
|
|
copy /y node_modules\@foliojs-fork\fontkit\use.trie dist\ >nul
|
|
copy /y node_modules\@foliojs-fork\linebreak\src\classes.trie dist\ >nul
|
|
copy /y node_modules\@foliojs-fork\pdfkit\js\data\*.afm dist\data\ >nul
|
|
copy /y node_modules\@foliojs-fork\pdfkit\js\data\sRGB_IEC61966_2_1.icc dist\data\ >nul
|
|
|
|
echo [3/4] Copying deploy scripts + DI console...
|
|
xcopy /e /i /q /y deploy dist\deploy >nul
|
|
del dist\deploy\build-dist.bat >nul 2>&1
|
|
if exist services\sap-di-pr.ps1 copy /y services\sap-di-pr.ps1 dist\ >nul
|
|
if exist services\SapDiConsole\bin\Release\net472\SapDiConsole.exe (
|
|
xcopy /i /q /y services\SapDiConsole\bin\Release\net472\* dist\SapDiConsole\bin\Release\net472\ >nul
|
|
) else (
|
|
echo WARNING: SapDiConsole.exe not built - Purchase Requests will not work.
|
|
)
|
|
|
|
echo [4/4] Creating runtime folders + .env template...
|
|
mkdir dist\uploads 2>nul
|
|
mkdir dist\logs 2>nul
|
|
echo # Copy the real .env here manually - it is NEVER included in the build. > dist\PUT-ENV-FILE-HERE.txt
|
|
|
|
echo.
|
|
echo ==========================================================
|
|
echo Build complete: dist\
|
|
for %%A in (dist\server.js) do echo Bundle size: %%~zA bytes
|
|
echo.
|
|
echo Next steps:
|
|
echo 1. Copy the CONTENTS of dist\ to the server app folder
|
|
echo 2. Put the real .env in that folder
|
|
echo 3. On the server run deploy\install-autostart.bat (as admin)
|
|
echo ==========================================================
|
|
pause
|