vite.config.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { fileURLToPath, URL } from 'node:url'
  2. import { defineConfig } from 'vite'
  3. import vue from '@vitejs/plugin-vue'
  4. import qiankun from 'vite-plugin-qiankun'
  5. const SUB_APP_NAME = 'web-app'
  6. // qiankun 子应用:借助 vite-plugin-qiankun 暴露微前端生命周期
  7. export default defineConfig(({ mode }) => {
  8. const isProd = mode === 'production'
  9. return {
  10. // 生产环境部署在 /web/ 子路径下;开发环境用根路径便于独立调试
  11. base: isProd ? '/web/' : '/',
  12. plugins: [
  13. vue(),
  14. qiankun(SUB_APP_NAME, { useDevMode: !isProd }),
  15. ],
  16. resolve: {
  17. alias: {
  18. '@': fileURLToPath(new URL('./src', import.meta.url)),
  19. },
  20. },
  21. server: {
  22. host: '0.0.0.0',
  23. port: 7100,
  24. strictPort: true,
  25. cors: true,
  26. origin: 'http://localhost:7100',
  27. headers: {
  28. // qiankun 通过 fetch 拉取子应用资源,须允许跨域
  29. 'Access-Control-Allow-Origin': '*',
  30. },
  31. proxy: {
  32. // 开发环境将 /api 代理到后端,避免浏览器跨域
  33. '/api': {
  34. target: process.env.VITE_API_TARGET || 'http://localhost:8080',
  35. changeOrigin: true,
  36. },
  37. },
  38. },
  39. build: {
  40. target: 'es2015',
  41. // 每个子应用产出去独立的 chunk,便于 qiankun 沙箱加载
  42. rollupOptions: {
  43. output: {
  44. chunkFileNames: 'assets/[name]-[hash].js',
  45. },
  46. },
  47. },
  48. }
  49. })