vite.config.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. import { defineConfig } from 'vite';
  2. import vue from '@vitejs/plugin-vue';
  3. import vueJsx from '@vitejs/plugin-vue-jsx';
  4. import Components from 'unplugin-vue-components/vite';
  5. import { NaiveUiResolver } from 'unplugin-vue-components/resolvers';
  6. // import viteESLint from 'vite-plugin-eslint';
  7. import legacyPlugin from '@vitejs/plugin-legacy';
  8. import { VitePWA } from 'vite-plugin-pwa';
  9. // 引入等比适配插件
  10. import px2rem from 'postcss-px2rem';
  11. import versionUpdatePlugin from './src/plugins/version';
  12. // 配置基本大小
  13. const postcss = px2rem({
  14. // 基准大小 baseSize,需要和rem.js中相同
  15. remUnit: 16
  16. });
  17. // eslint-disable-next-line @typescript-eslint/no-var-requires
  18. const path = require('path');
  19. function resolve(dir: string) {
  20. return path.join(__dirname, dir);
  21. }
  22. // https://vitejs.dev/config/
  23. // https://github.com/vitejs/vite/issues/1930 .env
  24. const proxyUrl = 'https://test.kt.colexiu.com/';
  25. // const proxyUrl = 'https://test.kt.colexiu.com';
  26. // const proxyUrl = 'http://192.168.3.14:7989';
  27. const now = new Date().getTime();
  28. export default defineConfig(() => {
  29. return {
  30. base: './',
  31. plugins: [
  32. vue(),
  33. vueJsx(),
  34. // viteESLint(),
  35. Components({
  36. dts: true,
  37. resolvers: [NaiveUiResolver()]
  38. }),
  39. legacyPlugin({
  40. targets: ['defaults', 'not IE 11'],
  41. additionalLegacyPolyfills: ['regenerator-runtime/runtime'],
  42. renderLegacyChunks: true,
  43. polyfills: [
  44. 'es.symbol',
  45. 'es.promise',
  46. 'es.promise.finally',
  47. 'es/map',
  48. 'es/set',
  49. 'es.array.filter',
  50. 'es.array.for-each',
  51. 'es.array.flat-map',
  52. 'es.object.define-properties',
  53. 'es.object.define-property',
  54. 'es.object.get-own-property-descriptor',
  55. 'es.object.get-own-property-descriptors',
  56. 'es.object.keys',
  57. 'es.object.to-string',
  58. 'web.dom-collections.for-each',
  59. 'esnext.global-this',
  60. 'esnext.string.match-all'
  61. ]
  62. }),
  63. VitePWA({
  64. // injectRegister: 'auto',
  65. registerType: 'prompt',
  66. includeAssets: ['./logo.png'],
  67. workbox: {
  68. skipWaiting: false, // 强制跳过等待
  69. clientsClaim: false, // 让新的 Service Worker 立即控制所有页面
  70. runtimeCaching: [
  71. {
  72. urlPattern: /^https:\/\/dev\.kt\.colexiu\.com\/classroom\/.+/,
  73. handler: 'NetworkOnly', // **所有 /classroom/* 走网络**
  74. options: {
  75. cacheName: 'bypass-classroom'
  76. }
  77. },
  78. {
  79. urlPattern: /^https:\/\/kt\.colexiu\.com\/classroom\/.+/,
  80. handler: 'NetworkOnly', // **所有 /classroom/* 走网络**
  81. options: {
  82. cacheName: 'bypass-classroom'
  83. }
  84. }
  85. ]
  86. },
  87. manifest: {
  88. name: '酷乐秀-音乐数字课堂',
  89. short_name: '音乐数字课堂',
  90. theme_color: '#E8EAED',
  91. display: 'fullscreen',
  92. icons: [
  93. {
  94. src: './logo.png',
  95. sizes: '192x192',
  96. type: 'image/png'
  97. },
  98. {
  99. src: './logo.png',
  100. sizes: '512x512',
  101. type: 'image/png'
  102. },
  103. {
  104. src: './logo.png',
  105. sizes: '512x512',
  106. type: 'image/png',
  107. purpose: 'any maskable'
  108. }
  109. ],
  110. prefer_related_applications: false,
  111. related_applications: [
  112. {
  113. platform: 'webapp',
  114. id: '1.0.0',
  115. url: './manifest.webmanifest'
  116. }
  117. ]
  118. },
  119. devOptions: {
  120. enabled: true
  121. }
  122. })
  123. // versionUpdatePlugin({
  124. // version: now
  125. // })
  126. ],
  127. define: {
  128. // 定义全局变量
  129. __APP_VERSION__: now
  130. },
  131. build: {
  132. target: 'es2015',
  133. rollupOptions: {
  134. output: {
  135. entryFileNames: `[name]-[hash]-${now}.js`,
  136. chunkFileNames: `[name]-[hash]-${now}.js`,
  137. assetFileNames: `[name]-[hash].[ext]`
  138. }
  139. }
  140. },
  141. resolve: {
  142. alias: {
  143. '@': resolve('./src'),
  144. '@common': resolve('./src/common'),
  145. '@components': resolve('./src/components'),
  146. '@store': resolve('./src/store'),
  147. '@views': resolve('./src/views')
  148. }
  149. },
  150. server: {
  151. host: '0.0.0.0',
  152. port: 5005,
  153. strictPort: true,
  154. cors: true,
  155. https: false,
  156. proxy: {
  157. '/edu-app': {
  158. target: proxyUrl,
  159. changeOrigin: true
  160. }
  161. }
  162. }
  163. };
  164. });