Laravel生产环境下Vite构建文件如何输出绝对路径而非完整域名
解决Laravel生产环境Vite输出不带域名的绝对路径问题
核心原因
Laravel的Vite集成默认会结合APP_URL生成完整带域名的资源URL,单纯修改vite.config.js的base选项会被Laravel的asset配置覆盖,因此需要同时调整Laravel的资源URL配置和Vite的base设置。
解决方案
1. 调整.env配置
在项目根目录的.env文件中添加或修改ASSET_URL,将其设置为根路径:
ASSET_URL=/
该配置会让Laravel生成资源URL时以根路径为基础,不再拼接APP_URL。
2. 修正vite.config.js的base配置
确保Vite的base选项指向build产物的存放目录(默认是public/build):
import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; export default defineConfig({ plugins: [ laravel({ input: ['resources/css/app.css', 'resources/js/app.js'], refresh: true, }), ], base: '/build/', });
3. 清除Laravel缓存
配置修改后,需清除配置缓存和应用缓存以确保新配置生效:
php artisan config:clear php artisan cache:clear
备选方案:自定义Vite资源URL生成逻辑
如果上述方法不生效,可在App\Providers\AppServiceProvider的boot方法中自定义Vite的URL生成规则:
<?php namespace App\Providers; use Illuminate\Support\Facades\Vite; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { public function boot() { // 自定义Vite资源URL,仅输出/build/开头的绝对路径 Vite::assetUrl(function ($path) { return "/build/{$path}"; }); } }
完成以上步骤后,重新执行npm run build,Blade中通过@vite(['resources/css/app.css', 'resources/js/app.js'])引入的资源,就会输出类似/build/css/app.74637622352.css的绝对路径,不再包含域名。
内容的提问来源于stack exchange,提问作者Aiden Pearce
相关产品推荐
相关产品推荐

