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

如何修改Vite中public目录资源的输出目录至/static文件夹?

解决Vite构建时public目录文件复制到static目录的问题

有两种可行方案,按需选择:

方案一:调整public目录结构(最简方案)

直接将public目录下的所有文件/子目录移动到public/static目录中。Vite构建时会自动将public内的结构完整复制到输出目录,最终这些文件就会出现在outDir/static路径下,完全匹配需求,无需修改任何配置。

方案二:使用vite-plugin-copy自定义复制规则(适合不想调整目录结构的场景)

  1. 安装插件:
npm install vite-plugin-copy --save-dev
# 或使用yarn
yarn add vite-plugin-copy -D
  1. 修改vite.config.js,引入插件并配置复制规则,同时禁用Vite默认的public目录复制行为:
import { defineConfig } from 'vite'
import copy from 'vite-plugin-copy'

export default defineConfig({
  base: "./",
   
  /* ---- 原有其他配置 ---- */

  plugins: [
    copy({
      targets: [
        {
          src: 'public/**/*', // 匹配public目录下所有文件及子目录
          dest: './../backend/src/main/resources/static/articles/static' // 指定复制到static目录内
        }
      ],
      // 可选:如果不需要保留public内的子目录结构,添加flatten: true会将所有文件直接放到static根目录
      // flatten: true
    })
  ],

  build: {
    assetsInlineLimit: 0,
    minify: true,
    publicDir: false, // 禁用Vite默认的public文件复制,避免生成重复文件
    rollupOptions: {
      output: {
        assetFileNames: (assetInfo) => {
          var info = assetInfo.name.split(".");
          var extType = info[info.length - 1];
          if (/png|jpe?g|svg|gif|tiff|bmp|ico/i.test(extType)) {
            extType = "img";
          } else if (/woff|woff2/.test(extType)) {
            extType = "css";
          }
          return `static/${extType}/[name]-[hash][extname]`;
        },
        chunkFileNames: "static/js/[name]-[hash].js",
        entryFileNames: "static/js/[name]-[hash].js",
      },
    },
    outDir: "./../backend/src/main/resources/static/articles/",
    emptyOutDir: true,
  },
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:57:30