vite.config.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import legacyPlugin from '@vitejs/plugin-legacy'
  2. import { viteLogo } from './src/core/config'
  3. import Banner from 'vite-plugin-banner'
  4. import * as path from 'path'
  5. import * as dotenv from 'dotenv'
  6. import * as fs from 'fs'
  7. import vuePlugin from '@vitejs/plugin-vue'
  8. import vueDevTools from 'vite-plugin-vue-devtools'
  9. import VueFilePathPlugin from './vitePlugin/componentName/index.js'
  10. import { svgBuilder } from 'vite-auto-import-svg'
  11. import { AddSecret } from './vitePlugin/secret'
  12. import UnoCSS from '@unocss/vite'
  13. // @see https://cn.vitejs.dev/config/
  14. export default ({ mode }) => {
  15. AddSecret('054b728c84f216edac1451d3330259ff')
  16. const NODE_ENV = mode || 'development'
  17. const envFiles = [`.env.${NODE_ENV}`]
  18. for (const file of envFiles) {
  19. const envConfig = dotenv.parse(fs.readFileSync(file))
  20. for (const k in envConfig) {
  21. process.env[k] = envConfig[k]
  22. }
  23. }
  24. viteLogo(process.env)
  25. const timestamp = Date.parse(new Date())
  26. const optimizeDeps = {}
  27. const alias = {
  28. '@': path.resolve(__dirname, './src'),
  29. vue$: 'vue/dist/vue.runtime.esm-bundler.js'
  30. }
  31. const esbuild = {}
  32. const rollupOptions = {
  33. output: {
  34. entryFileNames: 'assets/[name].[hash].js',
  35. chunkFileNames: 'assets/[name].[hash].js',
  36. assetFileNames: 'assets/[name].[hash].[ext]'
  37. }
  38. }
  39. const base = "/"
  40. const root = "./"
  41. const outDir = "dist"
  42. const config = {
  43. base: base, // 编译后js导入的资源路径
  44. root: root, // index.html文件所在位置
  45. publicDir: 'public', // 静态资源文件夹
  46. resolve: {
  47. alias
  48. },
  49. define: {
  50. 'process.env': {}
  51. },
  52. css: {
  53. preprocessorOptions: {
  54. scss: {
  55. api: 'modern-compiler' // or "modern"
  56. }
  57. }
  58. },
  59. server: {
  60. // 如果使用docker-compose开发模式,设置为false
  61. open: true,
  62. port: process.env.VITE_CLI_PORT,
  63. proxy: {
  64. // 把key的路径代理到target位置
  65. // detail: https://cli.vuejs.org/config/#devserver-proxy
  66. [process.env.VITE_BASE_API]: {
  67. // 需要代理的路径 例如 '/api'
  68. target: `${process.env.VITE_BASE_PATH}:${process.env.VITE_SERVER_PORT}/`, // 代理到 目标路径
  69. changeOrigin: true,
  70. rewrite: (path) =>
  71. path.replace(new RegExp('^' + process.env.VITE_BASE_API), '')
  72. }
  73. }
  74. },
  75. build: {
  76. minify: 'terser', // 是否进行压缩,boolean | 'terser' | 'esbuild',默认使用terser
  77. manifest: false, // 是否产出manifest.json
  78. sourcemap: false, // 是否产出sourcemap.json
  79. outDir: outDir, // 产出目录
  80. terserOptions: {
  81. compress: {
  82. //生产环境时移除console
  83. drop_console: true,
  84. drop_debugger: true
  85. }
  86. },
  87. rollupOptions
  88. },
  89. esbuild,
  90. optimizeDeps,
  91. plugins: [
  92. process.env.VITE_POSITION === 'open' &&
  93. vueDevTools({ launchEditor: process.env.VITE_EDITOR }),
  94. legacyPlugin({
  95. targets: [
  96. 'Android > 39',
  97. 'Chrome >= 60',
  98. 'Safari >= 10.1',
  99. 'iOS >= 10.3',
  100. 'Firefox >= 54',
  101. 'Edge >= 15'
  102. ]
  103. }),
  104. vuePlugin(),
  105. svgBuilder(['./src/plugin/','./src/assets/icons/'],base, outDir,'assets', NODE_ENV),
  106. [Banner(`\n Build based on gin-vue-admin \n Time : ${timestamp}`)],
  107. VueFilePathPlugin('./src/pathInfo.json'),
  108. UnoCSS()
  109. ]
  110. }
  111. return config
  112. }