vite.config.ts 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. import { defineConfig, loadEnv } from "vite"
  2. import { resolve } from "path"
  3. import createVitePlugins from "./vite/plugins"
  4. //import { visualizer } from "rollup-plugin-visualizer"
  5. // https://vitejs.dev/config/
  6. export default defineConfig(({ mode, command }) => {
  7. const env = loadEnv(mode, process.cwd())
  8. const { VITE_APP_ENV } = env
  9. return {
  10. // 部署生产环境和开发环境下的URL。
  11. // 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上
  12. // 例如 https://www.vber.net/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.vber.net/admin/,则设置 baseUrl 为 /admin/。
  13. base: VITE_APP_ENV === "production" ? "/" : "/",
  14. plugins: [
  15. ...createVitePlugins(env, command === "build")
  16. //,visualizer()
  17. ],
  18. build: {
  19. minify: "terser", // 启用 terser 压缩
  20. terserOptions: {
  21. compress: {
  22. pure_funcs: ["console.log"], // 只删除 console.log
  23. //drop_console: true, // 删除所有 console
  24. drop_debugger: true // 删除 debugger
  25. }
  26. },
  27. rollupOptions: {
  28. output: {
  29. // 最小化拆分包
  30. manualChunks(id) {
  31. if (id.includes("node_modules")) {
  32. // if (id.includes("node_modules/element-plus")) {
  33. // return "vb_plugin_element-plus"
  34. // }
  35. // if (id.includes("node_modules/nprogress")) {
  36. // return "vb_plugin_nprogress" //单独打包
  37. // }
  38. // if (id.includes("node_modules/quill")) {
  39. // return "vb_plugin_quill"
  40. // }
  41. // if (id.includes("node_modules/echarts")) {
  42. // return "vb_plugin_echarts"
  43. // }
  44. // if (id.includes("node_modules/lodash")) {
  45. // return "vb_plugin_lodash"
  46. // }
  47. // 通过拆分包的方式将所有来自node_modules的模块打包到单独的chunk中
  48. return "vb_plugin_vendor"
  49. }
  50. // 将全局库单独打包,避免和页面一起打包造成资源重复引入
  51. if (id.includes("/src/stores/")) {
  52. return "vb_store"
  53. }
  54. if (id.includes("/src/api/")) {
  55. return "vb_api"
  56. }
  57. // if (id.includes("/src/components/") && id.includes("/Vb")) {
  58. // return "vb_components"
  59. // }
  60. if (id.includes("/src/core/utils/") && id.includes("/Vb")) {
  61. return "vb_utils"
  62. }
  63. },
  64. // 设置chunk的文件名格式
  65. chunkFileNames: (chunkInfo) => {
  66. if (chunkInfo.isEntry) {
  67. return "index.[hash].js"
  68. }
  69. if (chunkInfo.name === "index") {
  70. const facadeModuleId = chunkInfo.facadeModuleId
  71. ? chunkInfo.facadeModuleId.split("/")
  72. : []
  73. const fileName = facadeModuleId[facadeModuleId.length - 2] || "[name]"
  74. // 根据chunk的facadeModuleId(入口模块的相对路径)生成chunk的文件名
  75. return `js/vb_view_${fileName}.[hash].js`
  76. }
  77. return `js/[name].[hash].js`
  78. },
  79. // 设置入口文件的文件名格式
  80. entryFileNames: "js/[name].[hash].js",
  81. // 设置静态资源文件的文件名格式
  82. assetFileNames(assetInfo) {
  83. if (assetInfo.name?.endsWith(".css")) {
  84. return "css/[name].[hash].[ext]"
  85. }
  86. const imgArray = [".png", "jpg", ".jpeg", "webp ", ".svg", ".gif"]
  87. if (imgArray.some((v) => assetInfo.name?.endsWith(v))) {
  88. return "img/[name].[hash].[ext]"
  89. }
  90. return "media/asset/[name].[hash:4].[ext]"
  91. }
  92. }
  93. },
  94. commonjsOptions: {
  95. requireReturnsDefault: "namespace"
  96. }
  97. },
  98. resolve: {
  99. // https://cn.vitejs.dev/config/#resolve-alias
  100. alias: {
  101. "@a": resolve(__dirname, "./src/api"),
  102. "@s": resolve(__dirname, "./src/stores"),
  103. "@r": resolve(__dirname, "./src/router"),
  104. "@v": resolve(__dirname, "./src/views"),
  105. "@@": resolve(__dirname, "./src/core"),
  106. "@@@": resolve(__dirname, "./src/components"),
  107. "@com": resolve(__dirname, "./src/components"),
  108. "@": resolve(__dirname, "./src"),
  109. "~": resolve(__dirname, "./")
  110. },
  111. // https://cn.vitejs.dev/config/#resolve-extensions
  112. extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"]
  113. },
  114. // vite 相关配置
  115. server: {
  116. port: 5050,
  117. // host: true,
  118. host: "0.0.0.0",
  119. // 热更新
  120. hmr: true,
  121. // 设为 true 时若端口已被占用则会直接退出,而不是尝试下一个可用端口
  122. strictPort: true,
  123. open: true,
  124. proxy: {
  125. "/dev-api": {
  126. target: "http://127.0.0.1:5051",
  127. //target: "http://xyhapi.yue.shvber.com:5013",
  128. changeOrigin: true,
  129. rewrite: (p) => p.replace(/^\/dev-api/, "")
  130. }
  131. // "/oss/preview": {
  132. // target: "http://127.0.0.1:5051",
  133. // changeOrigin: true,
  134. // rewrite: (p) => p.replace(/^\/oss\/preview/, "/oss/preview")
  135. // },
  136. // "/dev-api": {
  137. // target: "http://192.168.0.82:6060",
  138. // changeOrigin: true,
  139. // rewrite: (p) => p.replace(/^\/dev-api/, "/prod-api")
  140. // }
  141. }
  142. },
  143. preview: {
  144. port: 6666,
  145. // host: true,
  146. host: "0.0.0.0",
  147. // 热更新
  148. hmr: true,
  149. // 设为 true 时若端口已被占用则会直接退出,而不是尝试下一个可用端口
  150. strictPort: true,
  151. open: true,
  152. cors: false,
  153. proxy: {
  154. "/prod-api": {
  155. target: "http://localhost:5051",
  156. changeOrigin: true,
  157. rewrite: (p) => p.replace(/^\/prod-api/, "")
  158. }
  159. // "/prod-api": {
  160. // target: "http://192.168.0.82:6066",
  161. // changeOrigin: true,
  162. // rewrite: (p) => p.replace(/^\/prod-api/, "/prod-api")
  163. // }
  164. }
  165. }
  166. }
  167. })