chianglintu / spiral-vite-bridge
Spiral bridge for Vite manifests and dev server assets.
Requires
- php: >=8.4
- spiral/framework: ^3.15
README
Spiral bridge for Vite dev server and production manifest assets. It pairs with vite-plugin-spiral.
Install
composer require chianglintu/spiral-vite-bridge
Publish Configuration
The package ships a Spiral config file at config/vite.php. Copy it into your application:
cp vendor/chianglintu/spiral-vite-bridge/config/vite.php app/config/vite.php
Do not overwrite an existing app/config/vite.php without reviewing local changes first.
Expected location:
app/config/vite.php
Register the bootloader after Spiral views and Stempler:
use Spiral\Vite\Bootloader\ViteBootloader; ViteBootloader::class,
Stempler
@viteReactRefresh @viteFonts() @vite(['app/resources/css/fonts.css', 'app/resources/css/app.css', 'app/resources/js/app.ts']) @viteAsset('app/resources/images/logo.svg')
@viteReactRefresh is only needed for React projects. @viteFonts() is only useful when the Vite plugin fonts option is configured.
PHP API
use Spiral\Vite\Vite; $vite->tags('app/resources/js/app.ts'); $vite->asset('app/resources/images/logo.svg'); $vite->withNonce($nonce)->tags('app/resources/js/app.ts'); $vite->useCspNonce(); $vite->useScriptTagAttributes(['data-turbo-track' => 'reload']); $vite->useStyleTagAttributes(['data-turbo-track' => 'reload']); $vite->useIntegrityKey('custom-integrity'); $vite->createAssetPathsUsing(fn(string $path): string => "https://cdn.example.com/{$path}"); $vite->prefetch(concurrency: 3, event: 'load'); $vite->useAggressivePrefetching(); $vite->useFontsManifestFilename('fonts-manifest.json'); $vite->asset('app/resources/images/logo.svg', buildDirectory: 'admin-build'); $vite->content('app/resources/snippet.txt', buildDirectory: 'admin-build'); $vite->manifestHash(buildDirectory: 'admin-build'); $vite->toHtml(); $vite->flush();
Configuration supports enabled, public_directory, build_directory, hot_file, asset_url, manifest, ssr_manifest, fonts_manifest, integrity_key, and fail_loud. Missing manifests, missing entries, invalid JSON, and invalid hot URLs throw explicit exceptions.
Common environment variables:
VITE_ENABLED=true SPIRAL_VITE_ASSET_URL= ASSET_URL=
Useful state helpers:
hotFile()returns the active hot file path.isRunningHot()aliases dev-server detection.preloadedAssets()returns the modulepreload / prefetch URLs collected during tag rendering.
@viteFonts() renders font preloads plus stylesheet or inline @font-face output from the plugin fonts manifest, including optimized fallback CSS when generated.
Testing
Use Spiral\Vite\Testing\InteractsWithVite in Spiral tests and call withoutVite() to disable manifest lookups for a test. Disabled Vite renders empty tags and returns normalized fallback asset paths.