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

Laravel 11中Vite多app.scss编译合并问题求助

Laravel 11 + Vite:拆分SCSS编译输出独立CSS文件

问题原因

你当前的vite.config.js使用数组形式声明input资源,Laravel Vite插件默认会将所有独立的CSS入口合并为单个文件输出,这是插件为简化配置设定的默认行为,不符合你拆分前后台样式的需求。

解决方案

将input从数组改为键值对对象,给每个资源入口指定唯一名称,Vite会根据这些名称生成对应的独立输出文件,同时保留生产环境所需的hash后缀。

修改后的配置文件

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';

export default defineConfig({
    plugins: [
        laravel({
            input: {
                // 后台资源
                'admin-css': 'resources/assets/admin/sass/app.scss',
                'admin-js': 'resources/assets/admin/js/app.js',
                // 前端资源
                'frontend-css': 'resources/assets/frontend/sass/app.scss',
                'frontend-js': 'resources/assets/frontend/js/app.js',
            },
            refresh: true,
        }),
    ],
    build: {
        rollupOptions: {
            external: ['axios'],
        },
    }
});

在Blade模板中引用资源

修改配置后,需在对应页面模板中使用指定名称引用资源:

  • 后台页面:
{{-- 引入后台样式 --}}
@vite('admin-css')
{{-- 引入后台JS --}}
@vite('admin-js')
  • 前端页面:
{{-- 引入前端样式 --}}
@vite('frontend-css')
{{-- 引入前端JS --}}
@vite('frontend-js')

验证输出

执行npm run build后,public/build/assets目录下会生成独立的CSS和JS文件,类似:

public/build/assets/admin-css-[hash].css
public/build/assets/frontend-css-[hash].css
public/build/assets/admin-js-[hash].js
public/build/assets/frontend-js-[hash].js

同时manifest.json会正确映射每个入口的资源路径,Laravel的@vite指令会自动解析带hash的文件名。

可选:自定义输出文件名

如果需要更自定义的文件名(比如去掉hash或用固定名称),可在build.rollupOptions.output中配置:

build: {
    rollupOptions: {
        external: ['axios'],
        output: {
            assetFileNames: 'assets/[name].[ext]', // 资源文件(CSS、图片等)
            chunkFileNames: 'assets/[name].js',
            entryFileNames: 'assets/[name].js',
        }
    },
}

注意:生产环境建议保留hash以实现缓存刷新,仅在特殊场景下考虑去掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:05:09