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
相关产品推荐
相关产品推荐

