You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

69 lines
1.6 KiB

// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
import { readdirSync, existsSync, mkdirSync } from 'fs'
function createHTMLFiles() {
const viewsDir = './src/views/admin'
const vueFiles = readdirSync(viewsDir).filter(file => file.endsWith('.vue'))
const input = {}
vueFiles.forEach(file => {
const pageName = file.replace('.vue', '')
const htmlFileName = `${pageName}.html`
// 创建正确的 HTML 内容,使用相对路径
const htmlContent = `<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>${pageName}</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>`
// 确保目录存在
if (!existsSync('./src')) {
mkdirSync('./src')
}
// 将 HTML 文件写入 src 目录
writeFileSync(resolve(__dirname, 'src', htmlFileName), htmlContent)
input[pageName] = resolve(__dirname, 'src', htmlFileName)
})
return input
}
export default defineConfig({
plugins: [vue()],
base: './',
build: {
rollupOptions: {
input: {
main: resolve(__dirname, 'index.html'),
...createHTMLFiles()
}
},
assetsDir: '',
emptyOutDir: true,
// 添加 chunk 大小警告限制
chunkSizeWarningLimit: 1000
},
resolve: {
alias: {
'@': resolve(__dirname, 'src')
}
},
preview: {
port: 4173,
host: true,
open: '/landingManagement.html'
}
})