vite.config.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. import { resolve } from 'node:path'
  2. import UnoCSS from 'unocss/vite'
  3. import { defineConfig, loadEnv } from 'vite'
  4. import legacy from '@vitejs/plugin-legacy'
  5. import vue2 from '@vitejs/plugin-vue2'
  6. import { ViteEjsPlugin } from 'vite-plugin-ejs'
  7. import { viteExternalsPlugin } from 'vite-plugin-externals'
  8. import { legacyQiankun } from 'vite-plugin-legacy-qiankun'
  9. // https://github.com/iamxiyang/vite-plugin-html-redirect
  10. import ViteHtmlRedirect from 'vite-plugin-html-redirect'
  11. import { useServerProxy } from '../../configs/proxy/dev-proxy'
  12. const env = loadEnv(process.env.NODE_ENV, process.cwd())
  13. const baseCDN = {
  14. css: [
  15. 'https://cdn-common.jianyu360.com/cdn/lib/v-charts/1.19.0/style.min.css'
  16. ],
  17. js: [
  18. 'https://cdn-common.jianyu360.com/cdn/lib/echarts/4.8.0/echarts.min.js',
  19. 'https://cdn-common.jianyu360.com/cdn/lib/v-charts/1.19.0/index.min.js',
  20. 'https://cdn-common.jianyu360.com/cdn/lib/pdfjs-dist/2.1.266/build/pdf.min.js',
  21. 'https://cdn-common.jianyu360.com/cdn/lib/pdfjs-dist/2.1.266/web/pdf_viewer.js'
  22. // 'https://cdn-common.jianyu360.com/cdn/lib/jquery/3.5.1/jquery.min.js', // 标签上需要添加ignore
  23. ]
  24. }
  25. const prodCDN = {
  26. js: [
  27. 'https://cdn-common.jianyu360.com/cdn/lib/vue/2.7.16/vue.min.js',
  28. 'https://cdn-common.jianyu360.com/cdn/lib/vue-router/3.6.5/vue-router.min.js',
  29. 'https://cdn-common.jianyu360.com/cdn/lib/vuex/3.6.2/vuex.min.js',
  30. 'https://cdn-common.jianyu360.com/cdn/lib/axios/1.6.7/axios.min.js',
  31. 'https://cdn-common.jianyu360.com/cdn/lib/lodash/4.17.21/lodash.min.js',
  32. 'https://cdn-common.jianyu360.com/cdn/lib/dayjs/1.11.4/dayjs.min.js',
  33. 'https://cdn-common.jianyu360.com/cdn/lib/js-cookie/2.2.1/js.cookie.min.js'
  34. ]
  35. }
  36. function getCDN() {
  37. const isDev = process.env.NODE_ENV === 'development'
  38. if (isDev) {
  39. return baseCDN
  40. }
  41. else {
  42. const allCDN = Object.assign({}, baseCDN)
  43. allCDN.css = allCDN.css.concat(prodCDN.css || [])
  44. allCDN.js = allCDN.js.concat(prodCDN.js || [])
  45. return allCDN
  46. }
  47. }
  48. function getExternals() {
  49. const isDev = process.env.NODE_ENV === 'development'
  50. if (isDev) {
  51. return {}
  52. }
  53. return {
  54. 'vue': 'Vue',
  55. 'vue-router': 'VueRouter',
  56. 'vuex': 'Vuex',
  57. 'axios': 'axios',
  58. 'lodash': '_',
  59. 'echarts': 'echarts',
  60. 'v-charts': 'VeIndex',
  61. // 解决画像visualMap不显示问题
  62. // echarts: 'echarts',
  63. // moment: 'moment',
  64. 'jquery': '$'
  65. }
  66. }
  67. export default defineConfig({
  68. base: env.VITE_APP_BASE_PUBLIC,
  69. build: {
  70. outDir: '../../dist/page_big_pc',
  71. emptyOutDir: true,
  72. rollupOptions: {
  73. external: [
  74. '/common-module/chart-module/js/chart-common.js',
  75. '/qr?url=/stl/wxSubscrbePage'
  76. ],
  77. output: {
  78. manualChunks(id) {
  79. if (id.includes('node_modules/element-ui')) {
  80. return 'ElementUI'
  81. }
  82. }
  83. }
  84. }
  85. },
  86. optimizeDeps: {
  87. exclude: ['/common-module/chart-module/js/chart-common.js']
  88. },
  89. plugins: [
  90. UnoCSS(),
  91. vue2(),
  92. ViteEjsPlugin({
  93. cdn: getCDN(),
  94. assets: {
  95. version: Date.now()
  96. }
  97. }),
  98. ViteHtmlRedirect(),
  99. // eslintPlugin(),
  100. viteExternalsPlugin(getExternals()),
  101. legacy({
  102. targets: ['ie >= 11'],
  103. additionalLegacyPolyfills: ['regenerator-runtime/runtime']
  104. }),
  105. legacyQiankun({
  106. name: 'bigMemberSubApp',
  107. devSandbox: false
  108. })
  109. // vitePluginRequire()
  110. ],
  111. resolve: {
  112. alias: [
  113. // {
  114. // find: /^~/,
  115. // replacement: "",
  116. // },
  117. {
  118. find: '~@',
  119. replacement: resolve(__dirname, 'src')
  120. },
  121. {
  122. find: '@',
  123. replacement: resolve(__dirname, 'src')
  124. }
  125. ],
  126. extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
  127. },
  128. css: {
  129. preprocessorOptions: {
  130. scss: {
  131. silenceDeprecations: ['legacy-js-api', 'import'], // 静默所有相关警告
  132. additionalData: `
  133. @import "@/assets/style/_mixin.scss";
  134. @import "@/assets/style/_variables.scss";
  135. `
  136. }
  137. }
  138. },
  139. server: {
  140. port: 8081,
  141. proxy: useServerProxy('web'),
  142. host: '0.0.0.0'
  143. }
  144. })