{ "manifests": { "symfony/reprise": { "manifest": { "bundles": { "Symfony\\Reprise\\RepriseBundle": [ "all" ] }, "copy-from-recipe": { "assets/": "assets/", "config/": "%CONFIG_DIR%/" }, "conflict": { "symfony/flex": "<1.20.0 || >=2.0.0,<2.3.0", "symfony/framework-bundle": "<6.4" }, "gitignore": [ "/node_modules/", "/%PUBLIC_DIR%/build/" ], "add-lines": [ { "file": "templates/base.html.twig", "content": " {{ reprise_entry_link_tags('app') }}", "position": "after_target", "target": "{% block stylesheets %}", "warn_if_missing": true }, { "file": "templates/base.html.twig", "content": " {{ reprise_entry_script_tags('app') }}", "position": "after_target", "target": "{% block javascripts %}", "warn_if_missing": true } ], "post-install-output": [ "", " ", " Symfony Reprise ", " ", "", " A few frontend steps remain to wire up your bundler.", " The commands below use npm (or pnpm, yarn, ...).", "", " * If you don't have a bundler yet, install Vite or Rsbuild:", "", " npm install --save-dev vite", " # or", " npm install --save-dev @rsbuild/core", "", " * Install the Reprise plugin:", "", " npm install --save-dev @symfony/reprise", "", " * Register the plugin in your bundler config:", "", " // vite.config.js", " import { defineConfig } from 'vite'", " import Symfony from '@symfony/reprise/vite'", "", " export default defineConfig({", " build: {", " // On Vite 7 or older, use `rollupOptions` instead", " rolldownOptions: {", " input: {", " app: './assets/app.js',", " },", " },", " },", " plugins: [", " Symfony({", " // Enable support for Stimulus Controller and Symfony UX", " // stimulus: './assets/controllers.json',", " }),", " ],", " })", "", " // rsbuild.config.js", " import { defineConfig } from '@rsbuild/core'", " import Symfony from '@symfony/reprise/rsbuild'", "", " export default defineConfig({", " source: {", " entry: {", " app: './assets/app.js',", " },", " },", " plugins: [", " Symfony({", " // Enable support for Stimulus Controller and Symfony UX", " // stimulus: './assets/controllers.json',", " }),", " ],", " })", "", " * Render your assets from Twig with reprise_entry_link_tags('app') and", " reprise_entry_script_tags('app') (already added to templates/base.html.twig for you).", "", " * Build your assets:", "", " npx vite build # or: npx rsbuild build", " npx vite # dev server (or: npx rsbuild dev)", "", " * Read the documentation: https://github.com/symfony/reprise" ] }, "files": { "assets/app.js": { "contents": [ "/*", " * Welcome to your app's main JavaScript file!", " *", " * This file will be included onto the page via the reprise_entry_script_tags('app') Twig function,", " * which should already be in your base.html.twig.", " */", "import './styles/app.css';", "", "console.log('This log comes from assets/app.js - welcome to Symfony Reprise! \ud83c\udf89');", "" ], "executable": false }, "assets/styles/app.css": { "contents": [ "body {", " background-color: skyblue;", "}", "" ], "executable": false }, "config/packages/reprise.yaml": { "contents": [ "# Reprise works with zero configuration. Every option below is shown at its", "# default value; uncomment the block and tweak what you need.", "# See https://github.com/symfony/reprise/blob/main/doc/index.rst#configuration", "# reprise:", " # Directory the @symfony/reprise plugin writes entrypoints.json and manifest.json into.", " # output_path: '%kernel.project_dir%/public/build'", "", " # Throw when entrypoints.json or a requested entry is missing, instead of rendering nothing.", " # strict_mode: true", "", " # A framework.assets package name used to resolve entry URLs. null uses the default package.", " # asset_package: null", "", " # crossorigin attribute set alongside SRI integrity: false, 'anonymous' or 'use-credentials'.", " # crossorigin: false", "", " # Register rendered assets as WebLink HTTP/2 Link: preload headers (needs symfony/web-link).", " # preload: true", "", " # Default attributes added to every rendered