vite.config.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import legacyPlugin from '@vitejs/plugin-legacy'
  2. import AutoImport from 'unplugin-auto-import/vite'
  3. import Components from 'unplugin-vue-components/vite'
  4. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
  5. import { viteLogo } from './src/core/config'
  6. import Banner from 'vite-plugin-banner'
  7. import * as path from 'path'
  8. import * as dotenv from 'dotenv'
  9. import * as fs from 'fs'
  10. import vuePlugin from '@vitejs/plugin-vue'
  11. import GvaPosition from './vitePlugin/gvaPosition'
  12. import GvaPositionServer from './vitePlugin/codeServer'
  13. import fullImportPlugin from './vitePlugin/fullImport/fullImport.js'
  14. import { svgBuilder } from './vitePlugin/svgIcon/svgIcon.js'
  15. // @see https://cn.vitejs.dev/config/
  16. export default ({
  17. command,
  18. mode
  19. }) => {
  20. const NODE_ENV = mode || 'development'
  21. const envFiles = [
  22. `.env.${NODE_ENV}`
  23. ]
  24. for (const file of envFiles) {
  25. const envConfig = dotenv.parse(fs.readFileSync(file))
  26. for (const k in envConfig) {
  27. process.env[k] = envConfig[k]
  28. }
  29. }
  30. viteLogo(process.env)
  31. const timestamp = Date.parse(new Date())
  32. const optimizeDeps = {}
  33. const alias = {
  34. '@': path.resolve(__dirname, './src'),
  35. 'vue$': 'vue/dist/vue.runtime.esm-bundler.js',
  36. }
  37. const esbuild = {}
  38. const rollupOptions = {
  39. output: {
  40. entryFileNames: 'assets/087AC4D233B64EB0[name].[hash].js',
  41. chunkFileNames: 'assets/087AC4D233B64EB0[name].[hash].js',
  42. assetFileNames: 'assets/087AC4D233B64EB0[name].[hash].[ext]',
  43. },
  44. }
  45. const config = {
  46. base: './', // index.html文件所在位置
  47. root: './', // js导入的资源路径,src
  48. resolve: {
  49. alias,
  50. },
  51. define: {
  52. 'process.env': {}
  53. },
  54. server: {
  55. host: '127.0.0.1',
  56. port: 5173,
  57. strictPort: true,
  58. proxy: {
  59. '/api': {
  60. target: 'http://127.0.0.1:8888',
  61. changeOrigin: true,
  62. rewrite: (path) => path.replace(/^\/api/, ''),
  63. },
  64. '/uploads': {
  65. target: 'http://127.0.0.1:8888',
  66. changeOrigin: true,
  67. },
  68. },
  69. },
  70. build: {
  71. minify: 'terser',
  72. manifest: false,
  73. sourcemap: false,
  74. outDir: 'dist',
  75. assetsDir: 'assets',
  76. emptyOutDir: true,
  77. rollupOptions,
  78. },
  79. esbuild,
  80. optimizeDeps,
  81. plugins: [
  82. process.env.VITE_POSITION === 'open' && GvaPositionServer(),
  83. process.env.VITE_POSITION === 'open' && GvaPosition(),
  84. legacyPlugin({
  85. targets: ['Android > 39', 'Chrome >= 60', 'Safari >= 10.1', 'iOS >= 10.3', 'Firefox >= 54', 'Edge >= 15'],
  86. }),
  87. vuePlugin(),
  88. svgBuilder('./src/assets/icons/'),
  89. [Banner(`\n Build based on gin-vue-admin \n Time : ${timestamp}`)]
  90. ],
  91. css: {
  92. preprocessorOptions: {
  93. scss: {
  94. additionalData: `@use "@/style/element/index.scss" as *;`,
  95. }
  96. }
  97. },
  98. }
  99. if (NODE_ENV === 'development') {
  100. config.plugins.push(
  101. fullImportPlugin()
  102. )
  103. } else {
  104. config.plugins.push(AutoImport({
  105. resolvers: [ElementPlusResolver()]
  106. }),
  107. Components({
  108. resolvers: [ElementPlusResolver({
  109. importStyle: 'sass'
  110. })]
  111. }))
  112. }
  113. return config
  114. }