fix(make): пересобирать изменившийся фронтенд в make run
Цель run зависела только от backend, а статика фронтенда попадает в бинарник через go:embed из backend/static, который обновляла лишь цель frontend. Поэтому make run пересобирал Go-код со старым UI. - run теперь зависит от frontend backend; - frontend стала инкрементальной: npm ci только при изменении package.json/ package-lock.json, npm run build и копирование в backend/static — только когда исходники или конфиги новее, чем backend/static/index.html (он же stamp); - проверки вынесены в shell-recipe, т.к. имена SvelteKit-роутов вида (app) ломают разбор имён файлов в make.
This commit is contained in:
@@ -32,10 +32,44 @@ help:
|
|||||||
@echo "Available targets:"
|
@echo "Available targets:"
|
||||||
@grep -hE '^[a-zA-Z0-9_-]+:' $(MAKEFILE_LIST) | cut -d: -f1 | sed 's/^/ /'
|
@grep -hE '^[a-zA-Z0-9_-]+:' $(MAKEFILE_LIST) | cut -d: -f1 | sed 's/^/ /'
|
||||||
|
|
||||||
|
# Frontend sources whose changes must trigger a rebuild. `backend/static/index.html`
|
||||||
|
# doubles as the build stamp, so a clean clone or `make clean` (which empties
|
||||||
|
# backend/static) forces the next build to regenerate.
|
||||||
|
FRONTEND_OUT := backend/static/index.html
|
||||||
|
|
||||||
|
# `npm ci` is only needed when the manifest/lockfile change.
|
||||||
|
FRONTEND_DEPS_STAMP := frontend/node_modules/.install-stamp
|
||||||
|
|
||||||
|
# Build the SvelteKit bundle and copy it into backend/static (embedded via
|
||||||
|
# go:embed). Incremental: recompile only when frontend sources are newer than the
|
||||||
|
# embedded bundle. Paths are checked from the recipe (not as make prerequisites)
|
||||||
|
# because SvelteKit route names like `(app)` break make's filename parsing.
|
||||||
frontend:
|
frontend:
|
||||||
cd frontend && npm ci && npm run build
|
@set -e; \
|
||||||
rm -rf backend/static/*
|
if [ ! -f $(FRONTEND_DEPS_STAMP) ] \
|
||||||
cp -r frontend/build/* backend/static/
|
|| [ frontend/package.json -nt $(FRONTEND_DEPS_STAMP) ] \
|
||||||
|
|| [ frontend/package-lock.json -nt $(FRONTEND_DEPS_STAMP) ]; then \
|
||||||
|
echo '> cd frontend && npm ci'; \
|
||||||
|
cd frontend && npm ci; \
|
||||||
|
touch node_modules/.install-stamp; \
|
||||||
|
cd ..; \
|
||||||
|
fi; \
|
||||||
|
if [ ! -f $(FRONTEND_OUT) ] \
|
||||||
|
|| [ -n "$$(find frontend/src frontend/static -newer $(FRONTEND_OUT) -print -quit)" ] \
|
||||||
|
|| [ frontend/package.json -nt $(FRONTEND_OUT) ] \
|
||||||
|
|| [ frontend/package-lock.json -nt $(FRONTEND_OUT) ] \
|
||||||
|
|| [ frontend/svelte.config.js -nt $(FRONTEND_OUT) ] \
|
||||||
|
|| [ frontend/vite.config.ts -nt $(FRONTEND_OUT) ] \
|
||||||
|
|| [ frontend/tailwind.config.ts -nt $(FRONTEND_OUT) ] \
|
||||||
|
|| [ frontend/tsconfig.json -nt $(FRONTEND_OUT) ]; then \
|
||||||
|
echo '> cd frontend && npm run build'; \
|
||||||
|
cd frontend && npm run build; \
|
||||||
|
cd ..; \
|
||||||
|
rm -rf backend/static/*; \
|
||||||
|
cp -r frontend/build/* backend/static/; \
|
||||||
|
else \
|
||||||
|
echo 'frontend: up to date'; \
|
||||||
|
fi
|
||||||
|
|
||||||
backend:
|
backend:
|
||||||
mkdir -p bin
|
mkdir -p bin
|
||||||
@@ -87,7 +121,7 @@ build-release: frontend
|
|||||||
cp bin/galo bin/galo-$(VERSION)
|
cp bin/galo bin/galo-$(VERSION)
|
||||||
@echo "release: bin/galo-$(VERSION)"
|
@echo "release: bin/galo-$(VERSION)"
|
||||||
|
|
||||||
run: backend
|
run: frontend backend
|
||||||
./bin/galo
|
./bin/galo
|
||||||
|
|
||||||
migrate:
|
migrate:
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ make build # frontend -> backend/static -> go:embed -> bin/galo
|
|||||||
Отдельные шаги:
|
Отдельные шаги:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
make frontend # npm ci && npm run build, копирует статику в backend/static
|
make frontend # npm run build, копирует статику в backend/static (инкрементально)
|
||||||
make backend # CGO_ENABLED=0 go build -tags nodynamic -o bin/galo
|
make backend # CGO_ENABLED=0 go build -tags nodynamic -o bin/galo
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -133,6 +133,10 @@ make backend # CGO_ENABLED=0 go build -tags nodynamic -o bin/galo
|
|||||||
> транспилированный в Go libwebp вместо динамической загрузки через purego,
|
> транспилированный в Go libwebp вместо динамической загрузки через purego,
|
||||||
> благодаря чему бинарник остаётся полностью статическим.
|
> благодаря чему бинарник остаётся полностью статическим.
|
||||||
|
|
||||||
|
`make frontend` собирает только при изменении исходников `frontend/`; `npm ci`
|
||||||
|
запускается лишь когда менялись `package.json`/`package-lock.json`. `make run`
|
||||||
|
и `make build` учитывают это и не пересобирают неизменившийся фронтенд.
|
||||||
|
|
||||||
Проверка:
|
Проверка:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -151,7 +155,7 @@ make migrate # go run ./cmd/migrate — применяет up-миграци
|
|||||||
## Локальный запуск
|
## Локальный запуск
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
make run # соберёт backend и запустит ./bin/galo
|
make run # доберёт изменившийся фронтенд, соберёт backend и запустит ./bin/galo
|
||||||
# или напрямую:
|
# или напрямую:
|
||||||
./bin/galo
|
./bin/galo
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user