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

修改Vite outDir为public后Laravel 9.41出现manifest未找到错误

Laravel 9.41 Vite输出目录配置问题解决

问题

修改vite.config.js将Vite输出目录设为public后,执行npm run build报错:

Vite manifest not found at:
E:\oblia\obilia_site\public\build/manifest.json

npm run dev可正常运行,但build时Laravel仍在public/build下查找manifest文件,需求是让所有资源直接存放在public根目录而非子文件夹。

当前配置文件如下:

import { defineConfig } from "vite";
import { viteStaticCopy } from "vite-plugin-static-copy";
import laravel from "laravel-vite-plugin";

export default defineConfig({
  base: "/",
  build: {
    outDir: "public",
    emptyOutDir: false,
  },

  plugins: [
    laravel({
      input: [
        "resources/css/bootstrap.min.css",
        "resources/css/font-awesome.min.css",
        "resources/css/feather.css",
        "resources/css/owl.carousel.min.css",
        "resources/css/magnific-popup.min.css",
        "resources/css/lc_lightbox.css",
        "resources/css/bootstrap-select.min.css",
        "resources/css/dataTables.bootstrap5.min.css",
        "resources/css/select.bootstrap5.min.css",
        "resources/css/dropzone.css",
        "resources/css/scrollbar.css",
        "resources/css/datepicker.css",
        "resources/css/flaticon.css",
        "resources/css/notiflix.min.css",
        "resources/css/style.scss",
        "resources/css/override.scss",
        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        "resources/js/jquery-3.6.0.min.js",
        "resources/js/popper.min.js",
        "resources/js/bootstrap.min.js",
        "resources/js/magnific-popup.min.js",
        "resources/js/waypoints.min.js",
        "resources/js/counterup.min.js",
        "resources/js/waypoints-sticky.min.js",
        "resources/js/isotope.pkgd.min.js",
        "resources/js/imagesloaded.pkgd.min.js",
        "resources/js/owl.carousel.min.js",
        "resources/js/theia-sticky-sidebar.js",
        "resources/js/lc_lightbox.lite.js",
        "resources/js/bootstrap-select.min.js",
        "resources/js/dropzone.js",
        "resources/js/jquery.scrollbar.js",
        "resources/js/bootstrap-datepicker.js",
        "resources/js/jquery.dataTables.min.js",
        "resources/js/dataTables.bootstrap5.min.js",
        "resources/js/anm.js",
        "resources/js/notiflix.min.js",
        "resources/js/bootstrap-slider.min.js",
        "resources/js/chart.js",
        "resources/js/custom.js",
        "resources/js/app.js",
        "resources/js/init.js",
      ],
      refresh: true,
    }),
    viteStaticCopy({
      targets: [
        { src: "resources/images", dest: "" },
        { src: "resources/fonts", dest: "" },
        { src: "resources/files", dest: "" },
      ],
    }),
  ],
});

原因

Laravel Vite插件默认将资源打包到public/build目录,并且默认从该路径读取manifest文件。你仅修改了Vite核心的outDir参数,但未同步配置Laravel插件的manifest查找路径,也没调整Vite的资源输出子目录设置。

开发环境(npm run dev)下Vite通过开发服务器加载资源,不依赖manifest文件,所以不会报错;生产构建时生成manifest后,Laravel仍按默认路径查找,导致找不到文件。

解决方案

修改vite.config.js,补充Laravel插件的buildDirectory配置,调整Vite的assetsDir参数,并优化静态资源复制路径:

import { defineConfig } from "vite";
import { viteStaticCopy } from "vite-plugin-static-copy";
import laravel from "laravel-vite-plugin";

export default defineConfig({
  base: "/",
  build: {
    outDir: "public",
    emptyOutDir: false,
    assetsDir: ".", // 让编译后的资源直接输出到public根目录
  },

  plugins: [
    laravel({
      input: [
        // 保持原输入文件不变
        "resources/css/bootstrap.min.css",
        "resources/css/font-awesome.min.css",
        // ... 省略其他输入文件
        "resources/js/init.js",
      ],
      refresh: true,
      buildDirectory: "", // 告诉插件到public根目录查找manifest.json
    }),
    viteStaticCopy({
      targets: [
        { src: "resources/images/**/*", dest: "images" },
        { src: "resources/fonts/**/*", dest: "fonts" },
        { src: "resources/files/**/*", dest: "files" },
      ],
    }),
  ],
});

关键配置说明

  • build.assetsDir: ".":Vite默认会把编译后的js、css等资源放到assets子目录,设置为.后资源直接输出到outDir(即public)的根目录。
  • buildDirectory: "":Laravel Vite插件默认的构建目录是build,设为空字符串后,插件会到public根目录读取manifest.json。
  • viteStaticCopy路径优化:原配置将静态文件直接复制到public根目录,容易和编译后的资源冲突,改为指定子目录(images、fonts、files)更安全,也符合常规目录结构。
  • 注意:若设置emptyOutDir: true会清空public目录,执行前请确认目录下的.htaccess、favicon.ico等重要文件已备份或无需保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:15:44