You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

155 lines
4.8 KiB

3 years ago
  1. import { resolve } from "path";
  2. import vue from "@vitejs/plugin-vue";
  3. import svgLoader from "vite-svg-loader";
  4. import vueJsx from "@vitejs/plugin-vue-jsx";
  5. import { warpperEnv, regExps } from "./build";
  6. import { viteMockServe } from "vite-plugin-mock";
  7. import ElementPlus from "unplugin-element-plus/vite";
  8. import { UserConfigExport, ConfigEnv, loadEnv } from "vite";
  9. import themePreprocessorPlugin from "@zougt/vite-plugin-theme-preprocessor";
  10. // 当前执行node命令时文件夹的地址(工作目录)
  11. const root: string = process.cwd();
  12. // 路径查找
  13. const pathResolve = (dir: string): string => {
  14. return resolve(__dirname, ".", dir);
  15. };
  16. // 设置别名
  17. const alias: Record<string, string> = {
  18. "/@": pathResolve("src"),
  19. "@build": pathResolve("build"),
  20. //解决开发环境下的警告
  21. "vue-i18n": "vue-i18n/dist/vue-i18n.cjs.js"
  22. };
  23. export default ({ command, mode }: ConfigEnv): UserConfigExport => {
  24. const {
  25. VITE_PORT,
  26. VITE_PUBLIC_PATH,
  27. VITE_PROXY_DOMAIN,
  28. VITE_PROXY_DOMAIN_REAL
  29. } = warpperEnv(loadEnv(mode, root));
  30. const prodMock = true;
  31. return {
  32. base: VITE_PUBLIC_PATH,
  33. root,
  34. resolve: {
  35. alias
  36. },
  37. // 服务端渲染
  38. server: {
  39. // 是否开启 https
  40. https: false,
  41. // 端口号
  42. port: VITE_PORT,
  43. host: "0.0.0.0",
  44. // 本地跨域代理
  45. proxy:
  46. VITE_PROXY_DOMAIN_REAL.length > 0
  47. ? {
  48. [VITE_PROXY_DOMAIN]: {
  49. target: VITE_PROXY_DOMAIN_REAL,
  50. // ws: true,
  51. changeOrigin: true,
  52. rewrite: (path: string) => regExps(path, VITE_PROXY_DOMAIN)
  53. }
  54. }
  55. : null
  56. },
  57. plugins: [
  58. vue(),
  59. // jsx、tsx语法支持
  60. vueJsx(),
  61. // 自定义主题
  62. themePreprocessorPlugin({
  63. scss: {
  64. multipleScopeVars: [
  65. {
  66. scopeName: "layout-theme-default",
  67. path: pathResolve("src/layout/theme/default-vars.scss")
  68. },
  69. {
  70. scopeName: "layout-theme-light",
  71. path: pathResolve("src/layout/theme/light-vars.scss")
  72. },
  73. {
  74. scopeName: "layout-theme-dusk",
  75. path: pathResolve("src/layout/theme/dusk-vars.scss")
  76. },
  77. {
  78. scopeName: "layout-theme-volcano",
  79. path: pathResolve("src/layout/theme/volcano-vars.scss")
  80. },
  81. {
  82. scopeName: "layout-theme-yellow",
  83. path: pathResolve("src/layout/theme/yellow-vars.scss")
  84. },
  85. {
  86. scopeName: "layout-theme-mingQing",
  87. path: pathResolve("src/layout/theme/mingQing-vars.scss")
  88. },
  89. {
  90. scopeName: "layout-theme-auroraGreen",
  91. path: pathResolve("src/layout/theme/auroraGreen-vars.scss")
  92. },
  93. {
  94. scopeName: "layout-theme-pink",
  95. path: pathResolve("src/layout/theme/pink-vars.scss")
  96. },
  97. {
  98. scopeName: "layout-theme-saucePurple",
  99. path: pathResolve("src/layout/theme/saucePurple-vars.scss")
  100. }
  101. ],
  102. // 默认取 multipleScopeVars[0].scopeName
  103. defaultScopeName: "",
  104. // 在生产模式是否抽取独立的主题css文件,extract为true以下属性有效
  105. extract: true,
  106. // 独立主题css文件的输出路径,默认取 viteConfig.build.assetsDir 相对于 (viteConfig.build.outDir)
  107. outputDir: "",
  108. // 会选取defaultScopeName对应的主题css文件在html添加link
  109. themeLinkTagId: "head",
  110. // "head"||"head-prepend" || "body" ||"body-prepend"
  111. themeLinkTagInjectTo: "head",
  112. // 是否对抽取的css文件内对应scopeName的权重类名移除
  113. removeCssScopeName: false,
  114. // 可以自定义css文件名称的函数
  115. customThemeCssFileName: scopeName => scopeName
  116. }
  117. }),
  118. // svg组件化支持
  119. svgLoader(),
  120. ElementPlus({}),
  121. // mock支持
  122. viteMockServe({
  123. mockPath: "mock",
  124. localEnabled: command === "serve",
  125. prodEnabled: command !== "serve" && prodMock,
  126. injectCode: `
  127. import { setupProdMockServer } from './mockProdServer';
  128. setupProdMockServer();
  129. `,
  130. logger: true
  131. })
  132. ],
  133. optimizeDeps: {
  134. include: [
  135. "element-plus/lib/locale/lang/zh-cn",
  136. "element-plus/lib/locale/lang/en"
  137. ],
  138. exclude: ["@zougt/vite-plugin-theme-preprocessor/dist/browser-utils"]
  139. },
  140. build: {
  141. sourcemap: false,
  142. brotliSize: false,
  143. // 消除打包大小超过500kb警告
  144. chunkSizeWarningLimit: 2000,
  145. minify: false
  146. },
  147. define: {
  148. __INTLIFY_PROD_DEVTOOLS__: false
  149. }
  150. };
  151. };