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

Laravel+Vite多模块资源编译异常:仅Admin生效,Blog被忽略

问题描述

使用Laravel搭建多模块网站,每个模块拥有独立的JS和SCSS资源文件。期望执行npm run build时编译所有模块的资源,但当前仅Admin模块能正常编译,Blog模块被忽略。Vite配置代码如下:

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

const modules = ['Admin', 'Blog'];

export default defineConfig({
    plugins: modules.map((module) => {
        const inputFiles = [
            ...glob.sync('./Modules/${module}/Resources/assets/js/*.js'),
            ...glob.sync('./Modules/${module}/Resources/assets/sass/*.scss'),
        ];
        
        return laravel({
            input: inputFiles,
            publicDirectory: 'public/build/',
            buildDirectory: module,
            refresh: true,
        });
    }),
});
问题原因与修复方案

问题核心是模板字符串的引号使用错误:代码中用单引号'包裹路径字符串,导致${module}变量无法被解析为实际的模块名称(如Blog),glob会去查找字面量为./Modules/${module}/...的路径,自然找不到Blog模块的资源文件,最终只有Admin模块可能因其他默认配置或巧合被编译。

修复方法很简单,将glob.sync中的单引号替换为反引号`,让模板字符串正确解析变量:

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

const modules = ['Admin', 'Blog'];

export default defineConfig({
    plugins: modules.map((module) => {
        const inputFiles = [
            // 把单引号改成反引号
            ...glob.sync(`./Modules/${module}/Resources/assets/js/*.js`),
            ...glob.sync(`./Modules/${module}/Resources/assets/sass/*.scss`),
        ];
        
        return laravel({
            input: inputFiles,
            publicDirectory: 'public/build/',
            buildDirectory: module,
            refresh: true,
        });
    }),
});

如果想验证路径是否正确,可以在定义inputFiles后添加console.log(inputFiles),运行npm run build前查看控制台输出,确认能正确列出两个模块的所有JS和SCSS文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:47:32