rsbuild.config.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { defineConfig,loadEnv } from '@rsbuild/core';
  2. import { pluginVue } from '@rsbuild/plugin-vue';
  3. import { pluginModuleFederation } from '@module-federation/rsbuild-plugin';
  4. import { generateRoutesInfoPlugin } from './plugins/generateRoutesInfoPlugin';
  5. import { generateExposesFromRoutes } from './plugins/generateExposesPlugin';
  6. import { zipDistPlugin } from './plugins/zipDistPlugin';
  7. import { routes } from './src/router/routes';
  8. import pkg from './package.json';
  9. // Docs: https://rsbuild.rs/config/
  10. export default defineConfig((env:any) => {
  11. // 生成 Module Federation exposes 配置(只展示叶子节点)
  12. const { exposes } = generateExposesFromRoutes(routes, { onlyLeafNodes: true });
  13. const nodeEnv = env?.env || 'development';
  14. // 加载环境变量
  15. const envVars = loadEnv(nodeEnv) as any;
  16. const distDir = nodeEnv === 'production' ? pkg.name : 'dist';
  17. return {
  18. source: {
  19. // 配置路径别名
  20. alias: {
  21. '@': './src',
  22. },
  23. },
  24. server: {
  25. port: 3000,
  26. },
  27. dev: {
  28. assetPrefix: 'http://localhost:3000',
  29. writeToDisk: true,
  30. },
  31. output: {
  32. assetPrefix: 'auto',
  33. injectStyles: true, // ← 新增:将 CSS 内联到 JS 中
  34. // 🚀 使用 VITE_API_BASE_NAME 作为输出目录名称
  35. distPath: {
  36. root: distDir,
  37. },
  38. },
  39. plugins: [
  40. pluginVue(),
  41. pluginModuleFederation({
  42. name: pkg.name,
  43. getPublicPath: `function() { try { if (window.__MF_REMOTE_BASE_URL__ && window.__MF_REMOTE_BASE_URL__["${pkg.name}"]) { return window.__MF_REMOTE_BASE_URL__["${pkg.name}"]; } console.warn("__MF_REMOTE_BASE_URL__ not found, using fallback"); } catch (e) { console.warn("Failed to get publicPath from global variable:", e); } return window.location.origin + "/"; }`,
  44. // 🚀 根据路由自动生成 exposes 配置(只展示叶子节点)
  45. exposes: exposes,
  46. // ⭐ 完全禁用 DTS 插件
  47. dts: false,
  48. shared: {
  49. vue: {
  50. singleton: true,
  51. requiredVersion: '^3.5.26',
  52. },
  53. 'vue-router': {
  54. singleton: true,
  55. requiredVersion: '^4.6.4',
  56. },
  57. pinia: {
  58. singleton: true,
  59. requiredVersion: '^3.0.4',
  60. },
  61. 'ant-design-vue': {
  62. singleton: true,
  63. requiredVersion: '^4.2.6',
  64. },
  65. },
  66. }),
  67. // 自动生成 routes-info.json 插件
  68. generateRoutesInfoPlugin(),
  69. // 📦 最后执行:打包成 zip 并删除原始目录
  70. zipDistPlugin(distDir),
  71. ],
  72. };
  73. });