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

如何调整Vite配置,使HTML文件直接生成在dist根目录对应子文件夹?

调整Vite配置使HTML文件与assets同级放置

问题描述

我正在开发一个使用Vite作为构建工具的Vue.js项目,需要调整Vite配置,让构建后的HTML文件直接位于dist文件夹中,与assets文件夹同级。当前HTML文件被放置在dist目录的src子文件夹内。

当前Vite配置

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

export default defineConfig({
  publicDir: false,
  build: {
    outDir: resolve(__dirname, 'dist'),
    emptyOutDir: true,
    rollupOptions: {
      input: {
        login: resolve(__dirname, 'src/login/login.html'),
        cadastro: resolve(__dirname, 'src/cadastro/cadastro.html'),
        home: resolve(__dirname, 'src/home/home.html')
      }
    }
  },
  plugins: [vue()]
});

当前dist目录结构

dist/
├── assets/
│   ├── cadastro-118e7637.css
│   ├── cadastro-669bfe7b.js
│   ├── home-7dbac266.js
│   ├── home-a84cd419.css
│   ├── login-572efaa1.css
│   ├── login-9a4f8a3b.js
│   ├── modulepreload-polyfill-3cfb730f.js
│   └── runtime-dom.esm-bundler-4af65d94.js
└── src/
    ├── cadastro/
    │   └── cadastro.html
    ├── home/
    │   └── home.html
    └── login/
        └── login.html

期望的dist目录结构

dist/
├── assets/
│   ├── cadastro-118e7637.css
│   ├── cadastro-669bfe7b.js
│   ├── home-7dbac266.js
│   ├── home-a84cd419.css
│   ├── login-572efaa1.css
│   ├── login-9a4f8a3b.js
│   ├── modulepreload-polyfill-3cfb730f.js
│   └── runtime-dom.esm-bundler-4af65d94.js
├── cadastro/
│   └── cadastro.html
├── home/
│   └── home.html
└── login/
    └── login.html

解决方案

你可以通过以下两种方法实现目标:

方法一:配置Rollup的模块根目录

在rollupOptions中添加output配置,设置preserveModulesRoot为'src',Rollup会将src目录视为模块根目录,输出时自动去掉src前缀:

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

export default defineConfig({
  publicDir: false,
  build: {
    outDir: resolve(__dirname, 'dist'),
    emptyOutDir: true,
    rollupOptions: {
      input: {
        login: resolve(__dirname, 'src/login/login.html'),
        cadastro: resolve(__dirname, 'src/cadastro/cadastro.html'),
        home: resolve(__dirname, 'src/home/home.html')
      },
      output: {
        preserveModulesRoot: 'src'
      }
    }
  },
  plugins: [vue()]
});

方法二:修改输入入口的key值

直接将input对象的key改为目标输出路径,Rollup会根据key生成对应的目录结构:

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

export default defineConfig({
  publicDir: false,
  build: {
    outDir: resolve(__dirname, 'dist'),
    emptyOutDir: true,
    rollupOptions: {
      input: {
        'login/login': resolve(__dirname, 'src/login/login.html'),
        'cadastro/cadastro': resolve(__dirname, 'src/cadastro/cadastro.html'),
        'home/home': resolve(__dirname, 'src/home/home.html')
      }
    }
  },
  plugins: [vue()]
});

两种方法都能实现你期望的目录结构,任选其一即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:45:54