The @symfony/stimulus-bundle loader generates an empty controllers.js, so Stimulus controllers from controllers.json (including ux-react) were never registered. Switching to vite-plugin-symfony/stimulus/helpers uses the virtual:symfony/controllers module that properly reads controllers.json. Also wrap react_component() output in a <div> since it only renders data-attributes, not a full HTML element. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
84 lines
1.8 KiB
Docker
84 lines
1.8 KiB
Docker
FROM dunglas/frankenphp:php8.4-alpine AS base
|
|
|
|
RUN install-php-extensions \
|
|
intl \
|
|
opcache \
|
|
pdo_pgsql \
|
|
zip
|
|
|
|
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
|
|
|
|
WORKDIR /app
|
|
|
|
###
|
|
# Dev stage
|
|
###
|
|
FROM base AS dev
|
|
|
|
COPY composer.json composer.lock symfony.lock ./
|
|
RUN composer install --no-scripts --no-autoloader --prefer-dist
|
|
|
|
COPY . .
|
|
RUN composer dump-autoload
|
|
|
|
ENV APP_ENV=dev \
|
|
SERVER_NAME=":80" \
|
|
POSTGRES_HOST=database \
|
|
POSTGRES_PORT=5432 \
|
|
POSTGRES_VERSION=16 \
|
|
POSTGRES_DB=app \
|
|
POSTGRES_USER=app \
|
|
POSTGRES_PASSWORD=pwd
|
|
|
|
###
|
|
# Composer install stage (provides vendor assets for node build)
|
|
###
|
|
FROM base AS composer-deps
|
|
|
|
COPY composer.json composer.lock symfony.lock ./
|
|
RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist
|
|
|
|
###
|
|
# Node build stage (for prod assets)
|
|
###
|
|
FROM node:22-alpine AS node-build
|
|
|
|
WORKDIR /app
|
|
|
|
# Copy vendor UX assets so npm can resolve file: dependencies
|
|
COPY --from=composer-deps /app/vendor/symfony/ux-react/assets vendor/symfony/ux-react/assets
|
|
|
|
COPY package.json package-lock.json* ./
|
|
RUN npm install
|
|
|
|
COPY assets/ ./assets/
|
|
COPY vite.config.js ./
|
|
|
|
RUN npm run build
|
|
|
|
###
|
|
# Prod stage
|
|
###
|
|
FROM base AS prod
|
|
|
|
COPY composer.json composer.lock symfony.lock ./
|
|
RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist
|
|
|
|
COPY . .
|
|
|
|
# Copy Vite-built assets
|
|
COPY --from=node-build /app/public/build /app/public/build
|
|
|
|
RUN APP_ENV=prod composer dump-autoload --classmap-authoritative \
|
|
&& APP_ENV=prod composer run-script post-install-cmd \
|
|
&& chown -R www-data:www-data var/
|
|
|
|
ENV APP_ENV=prod \
|
|
SERVER_NAME=localhost \
|
|
POSTGRES_HOST=database \
|
|
POSTGRES_PORT=5432 \
|
|
POSTGRES_VERSION=16 \
|
|
POSTGRES_DB=app \
|
|
POSTGRES_USER=app \
|
|
POSTGRES_PASSWORD=pwd
|