猎羽广告

vite.config.ts 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import { defineConfig } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import { resolve } from 'path'
  4. import fs from 'fs';
  5. import AutoImport from 'unplugin-auto-import/vite'
  6. import Components from 'unplugin-vue-components/vite'
  7. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
  8. import Icons from 'unplugin-icons/vite'
  9. import IconsResolver from 'unplugin-icons/resolver'
  10. // 手动导入
  11. import ElementPlus from 'unplugin-element-plus/vite'
  12. // https://vitejs.dev/config/
  13. export default defineConfig(({ mode}) => {
  14. return{
  15. base: './',
  16. css: {
  17. preprocessorOptions: {
  18. scss: {
  19. // 自定义的主题色
  20. additionalData: `@use "@/assets/style/element/index.scss" as *;`,
  21. },
  22. },
  23. },
  24. plugins: [
  25. vue(),
  26. ElementPlus({
  27. useSource: true,
  28. }),
  29. AutoImport({
  30. imports: ["vue", "vue-router"],
  31. resolvers: [
  32. IconsResolver(),
  33. ElementPlusResolver({
  34. // 自动引入修改主题色添加这一行,使用预处理样式,不添加将会导致使用ElMessage,ElNotification等组件时默认的主题色会覆盖自定义的主题色
  35. // importStyle: "sass",
  36. importStyle: mode === "development" ? false : "sass",
  37. })
  38. ],
  39. }),
  40. Components({
  41. resolvers: [
  42. IconsResolver(),
  43. ElementPlusResolver({
  44. // 自动引入修改主题色添加这一行,使用预处理样式
  45. // importStyle: "sass",
  46. importStyle: mode === "development" ? false : "sass",
  47. })
  48. ],
  49. }),
  50. Icons({
  51. autoInstall: true,
  52. }),
  53. ],
  54. server: {
  55. host: '0.0.0.0', //解决“vite use `--host` to expose”
  56. port: 8080,
  57. open: false,
  58. hmr:true,
  59. cors: true, // 允许跨域
  60. proxy: {
  61. '/api': {
  62. target: "http://idea-ad.wenxingshuju.com",
  63. changeOrigin: true,
  64. secure: false,
  65. },
  66. }
  67. },
  68. resolve:{
  69. alias:[
  70. {
  71. find:'@',
  72. replacement:resolve(__dirname,'src')
  73. }
  74. ]
  75. },
  76. build: {
  77. outDir: "dist",
  78. // outDir:'../',
  79. // /** 打包后静态资源目录 */
  80. // assetsDir: "./static",
  81. sourcemap: false,
  82. minify: 'terser',
  83. chunkSizeWarningLimit: 1500,
  84. terserOptions: {
  85. compress: {
  86. drop_console: true,
  87. drop_debugger: true
  88. }
  89. },
  90. rollupOptions: {
  91. output: {
  92. manualChunks(id) {
  93. if (id.includes('node_modules')) {
  94. return id
  95. .toString()
  96. .split('node_modules/')[1]
  97. .split('/')[0]
  98. .toString();
  99. }
  100. },
  101. chunkFileNames: (chunkInfo) => {
  102. const facadeModuleId = chunkInfo.facadeModuleId
  103. ? chunkInfo.facadeModuleId.split('/')
  104. : [];
  105. const fileName =
  106. facadeModuleId[facadeModuleId.length - 2] || '[name]';
  107. return `js/${fileName}/[name].[hash].js`;
  108. }
  109. }
  110. }
  111. },
  112. }
  113. })