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.

68 lines
1.6 KiB

3 months ago
3 months ago
3 months ago
  1. // vite.config.js
  2. import { defineConfig } from 'vite'
  3. import vue from '@vitejs/plugin-vue'
  4. import { resolve } from 'path'
  5. import { readdirSync, existsSync, mkdirSync } from 'fs'
  6. function createHTMLFiles() {
  7. const viewsDir = './src/views/admin'
  8. const vueFiles = readdirSync(viewsDir).filter(file => file.endsWith('.vue'))
  9. const input = {}
  10. vueFiles.forEach(file => {
  11. const pageName = file.replace('.vue', '')
  12. const htmlFileName = `${pageName}.html`
  13. // 创建正确的 HTML 内容,使用相对路径
  14. const htmlContent = `<!DOCTYPE html>
  15. <html lang="zh-CN">
  16. <head>
  17. <meta charset="UTF-8" />
  18. <link rel="icon" type="image/svg+xml" href="/vite.svg" />
  19. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  20. <title>${pageName}</title>
  21. </head>
  22. <body>
  23. <div id="app"></div>
  24. <script type="module" src="/src/main.js"></script>
  25. </body>
  26. </html>`
  27. // 确保目录存在
  28. if (!existsSync('./src')) {
  29. mkdirSync('./src')
  30. }
  31. // 将 HTML 文件写入 src 目录
  32. writeFileSync(resolve(__dirname, 'src', htmlFileName), htmlContent)
  33. input[pageName] = resolve(__dirname, 'src', htmlFileName)
  34. })
  35. return input
  36. }
  37. export default defineConfig({
  38. plugins: [vue()],
  39. base: './',
  40. build: {
  41. rollupOptions: {
  42. input: {
  43. main: resolve(__dirname, 'index.html'),
  44. ...createHTMLFiles()
  45. }
  46. },
  47. assetsDir: '',
  48. emptyOutDir: true,
  49. // 添加 chunk 大小警告限制
  50. chunkSizeWarningLimit: 1000
  51. },
  52. resolve: {
  53. alias: {
  54. '@': resolve(__dirname, 'src')
  55. }
  56. },
  57. preview: {
  58. port: 4173,
  59. host: true,
  60. open: '/landingManagement.html'
  61. }
  62. })