Vite - 静态文件不复制

Vite - Static Files Are Not Copying

我有一个依赖 Vite 的 Vue.js 应用程序。在此应用程序中,我有两个静态文件需要复制到我的 dist 目录:favicon.icomanifest.json。我的 vite.config.js 文件如下所示:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig(({command, mode }) => {
  return {
    assetsDir: 'res',
    plugins: [vue()],
    publicDir: 'dist',
    root: 'src',
    build: {
      emptyOutDir: true,
      outDir: '../dist'
    }
  }
});

我的目录结构是这样的:

/
  /dist
  /src
    /assets
      favicon.ico
      manifest.json
    /res
      /css
        theme.css
    App.vue
    main.js
    index.html
  package.json
  README.md
  vite.config.js

当我使用 npm run build 编译我的程序时,我可以看到在 dist 目录中创建了一个名为 index.html 的文件。但是,我一直没有成功将 favicon.icomanifest.json 文件复制到 dist 目录,这正是我所需要的。我尝试将 publicDir: 'assets' 添加到 build 选项。但是,那没有用。我还尝试在 src 目录下创建一个 public 目录,以便与 this documentation 一起努力。但是,这并没有将文件移动到目录中。我做错了什么?

原因:public(vite选项)目录是相对于你的root(vite选项)目录。

所以,正如您指定的 root: 'src'publicDir: 'dist' 那么您的 public 目录是 ./src/dist

基于您的文件夹树的图示 vite.config.js :

下面有更多信息


如果您的资产是:

  • 从未在源代码中引用(例如 favicon.ico)
  • 必须保留完全相同的文件名(没有散列)
  • ...或者您根本不想为了获取其 URL
  • 而必须先导入资产

然后医生说:

You can place the asset in a special public directory under your project root. Assets in this directory will be served at root path / during dev, and copied to the root of the dist directory as-is.

这意味着如果你简单地将 favicon.ico 放在 /public 目录下,它将在构建后被复制到 dist 目录。

如果你有一个 vanilla vite 配置,上面的注释 是正确的,但是如果你更改 vite 配置的 publicDir 选项然后在插图之后阅读下面的内容。

favicon.icovite build

之后复制到 dist

如果您设置自定义 publicDir :

如本答案顶部所述,public (vite 选项) 目录是相对于您的 root ( vite选项)目录。

因此,例如,如果您设置 root: './src' 并设置 publicDir: 'mypublic' ,那么 public 目录将是 ./src/mypublic