vite.config.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import { defineConfig, loadEnv } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import alias from '@rollup/plugin-alias'
  4. import vueJsx from '@vitejs/plugin-vue-jsx'
  5. import { resolve } from 'path'
  6. import AutoImport from 'unplugin-auto-import/vite'
  7. import Components from 'unplugin-vue-components/vite'
  8. import Icons from 'unplugin-icons/vite'
  9. const rootPath = resolve(__dirname)
  10. import { createHtmlPlugin } from 'vite-plugin-html'
  11. // https://vitejs.dev/config/
  12. export default defineConfig(({ command, mode }) => {
  13. const env = loadEnv(mode, process.cwd(), '')
  14. return {
  15. plugins: [
  16. vue(),
  17. vueJsx(),
  18. createHtmlPlugin({
  19. minify: true,
  20. template: 'public/admin.html',
  21. inject: {
  22. data: {
  23. title: env.APP_NAME,
  24. },
  25. },
  26. }),
  27. alias({
  28. entries: [
  29. {
  30. find: '/admin',
  31. replacement: resolve(rootPath, 'resources/admin'),
  32. },
  33. {
  34. find: '@/module',
  35. replacement: resolve(rootPath, 'modules'),
  36. },
  37. ],
  38. }),
  39. AutoImport({
  40. imports: ['vue', 'vue-router', 'pinia', '@vueuse/core'],
  41. // resolvers: [ ElementPlusResolver({importStyle: 'sass'}) ]
  42. }),
  43. Components({
  44. dirs: ['resources/admin/components/', 'resources/admin/layout/'],
  45. extensions: ['vue'],
  46. deep: true,
  47. dts: true,
  48. include: [/\.vue$/, /\.vue\?vue/],
  49. exclude: [/[\\/]node_modules[\\/]/, /[\\/]\.git[\\/]/, /[\\/]\.nuxt[\\/]/],
  50. // resolvers: [ ElementPlusResolver({ importStyle: 'sass'}) ]
  51. }),
  52. Icons({
  53. compiler: 'vue3',
  54. autoInstall: true,
  55. }),
  56. ],
  57. publicDir: false,
  58. define: {
  59. BASE_URL: env.BASE_URL,
  60. },
  61. preprocessorOptions: {
  62. scss: {
  63. // additionalData: `@use "@/assets/styles/element.scss" as *;`,
  64. },
  65. },
  66. server: {
  67. host: '127.0.0.1',
  68. port: 8000,
  69. open: true, // 自动打开浏览器
  70. cors: true, // 允许跨域
  71. strictPort: false, // 端口占用直接退出
  72. hmr: true,
  73. fs: {
  74. allow: ['./'],
  75. },
  76. },
  77. build: {
  78. chunkSizeWarningLimit: 2000,
  79. minify: 'terser',
  80. terserOptions: {
  81. compress: {
  82. drop_console: false,
  83. pure_funcs: ['console.log', 'console.info'],
  84. drop_debugger: true,
  85. },
  86. },
  87. // emptyOutDir: false,
  88. outDir: 'public/admin',
  89. assetsDir: 'assets',
  90. rollupOptions: {
  91. input: './public/admin.html',
  92. output: {
  93. chunkFileNames: 'assets/js/[name]-[hash].js',
  94. entryFileNames: 'assets/js/[name]-[hash].js',
  95. assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
  96. },
  97. },
  98. },
  99. }
  100. })