rsbuild.config.ts 2.5 KB

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