You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在子目录的Laravel+Inertia+Vue应用Vite组件CSS加载失败求助

解决Laravel+Vite部署子目录后CSS路径错误的问题

1. 配置Vite的base路径

在vite.config.js中添加base配置,指定你的子目录路径(比如示例中的subdirectory),让Vite生成的资源路径自动带上子目录前缀:

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import vue from '@vitejs/plugin-vue';
import path from 'path';

export default defineConfig({
   // 新增base配置,对应你的子目录名称
   base: '/subdirectory/',
   plugins: [
       laravel({
           input : [
               'resources/js/app.js',
               'resources/sass/website/theme.scss',
               'resources/js/website/main.js',
           ],
           refresh: [{
               paths: ['resources/js/**', 'resources/sass/**'],
               config: { delay: 300 }
           }],
       }),    
       
       vue({
           template: {
               transformAssetUrls: {
                   base: null,
                   includeAbsolute: false,
               },
           },
       }),
   ],
   resolve: {
       alias: {
           'ziggy': path.resolve('vendor/tightenco/ziggy/dist'),
           'ziggy-vue' : path.resolve('vendor/tightenco/ziggy/src/js/vue'),            
       }
   }
});

2. 配置Laravel环境变量

在项目根目录的.env文件中,设置正确的应用URL和资源URL,确保Laravel生成的资源链接也包含子目录:

APP_URL=http://example.com/subdirectory
ASSET_URL=http://example.com/subdirectory

3. 重新构建前端资源

执行生产环境构建命令,让Vite根据新配置生成带正确路径的资源文件:

npm run build

4. 确认Inertia路由分组(可选)

如果使用Inertia管理页面路由,确保Laravel路由文件中已将相关路由分组到子目录下:

Route::prefix('subdirectory')->group(function () {
    Route::inertia('/login', 'Login')->name('login');
    // 其他页面路由...
});

原理说明

部署到子目录后,Vite默认会以根路径生成资源URL,添加base配置后,Vite会自动在所有资源(包括组件内的CSS)路径前拼接子目录前缀;同时Laravel的ASSET_URL确保框架层面生成的资源链接也符合子目录结构,两者配合即可解决资源路径缺失子目录的问题。

内容的提问来源于stack exchange,提问作者black_belt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:03:34