Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vmicro #4938

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

Vmicro #4938

wants to merge 2 commits into from

Conversation

Gocas
Copy link

@Gocas Gocas commented Nov 21, 2024

Description

This pull request includes multiple changes across various files in the apps/web-antd project. The most important changes involve configuration updates, micro-frontend integration, and layout adjustments.

Configuration Updates:

Micro-Frontend Integration:

Layout Adjustments:

Other Notable Changes:

These changes collectively enhance the project's configuration management, facilitate micro-frontend capabilities, and improve layout handling.

Summary by CodeRabbit

Release Notes

  • New Features

    • Introduced new environment variables for application configuration.
    • Added support for micro-frontend architecture, enhancing data handling and lifecycle management.
    • New layout components (LayoutUI, LayoutContent) and routes for micro-app integration.
    • Added MicroAppView component for displaying micro-applications.
  • Bug Fixes

    • Improved spinner visibility handling based on loading conditions.
  • Documentation

    • Updated various configuration files to reflect new dependencies and routing changes.
  • Chores

    • Cleaned up commented-out code and unused variables in several files.

@Gocas Gocas requested review from anncwb, vince292007 and a team as code owners November 21, 2024 05:31
Copy link

changeset-bot bot commented Nov 21, 2024

⚠️ No Changeset found

Latest commit: d5b3720

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

Copy link
Contributor

coderabbitai bot commented Nov 21, 2024

Walkthrough

The pull request introduces several modifications to the environment variable configurations and application structure in the apps/web-antd and playground projects. New environment variables are added, while existing ones are removed across various .env files. The HTML structure is updated, including changes to element IDs and classes. Additionally, new components and functions are introduced to support micro-frontend architecture, enhancing data handling and lifecycle management. Dependencies are updated in package.json files, and new routing configurations are established for micro-frontend integration.

Changes

File Change Summary
apps/web-antd/.env Added variables: VITE_BASE=/vben-antd/, VITE_INJECT_APP_LOADING=false.
apps/web-antd/.env.analyze Removed variable: VITE_BASE=/.
apps/web-antd/.env.development Removed variables: VITE_BASE, VITE_INJECT_APP_LOADING.
apps/web-antd/.env.production Removed variable: VITE_INJECT_APP_LOADING=true.
apps/web-antd/index.html Updated ID from app to antd-app, added class app, commented out Baidu statistics script.
apps/web-antd/package.json Added dependency: @micro-zoe/micro-app with version "catalog:".
apps/web-antd/src/bootstrap.ts Added functions: handleMicroData, unmount. Updated mount to use #antd-app.
apps/web-antd/src/layouts/index.ts Added components: LayoutUI, LayoutContent. Updated exports.
apps/web-antd/src/preferences.ts No changes to exported entities.
apps/web-antd/src/router/access.ts Updated layoutMap to include LayoutContent.
apps/web-antd/src/router/routes/modules/demos.ts Updated route component from BasicLayout to LayoutContent.
apps/web-antd/src/router/routes/modules/vben.ts Updated route component from BasicLayout to LayoutContent.
apps/web-antd/src/useChildMicro.ts Added interface IMicroAppData, function handleDataListener.
apps/web-antd/vite.config.mts Added open: true to server configuration.
internal/vite-config/src/plugins/index.ts No changes to exported entities.
internal/vite-config/src/plugins/nitro-mock.ts No changes to exported entities.
packages/@core/base/design/src/css/global.css Added class .app.
packages/@core/base/typings/src/vue-router.d.ts Added property micro to RouteMeta interface.
packages/@core/composables/src/use-layout-style.ts No changes to exported entities.
packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue Updated interface and style declaration.
packages/effects/layouts/package.json Added dependencies: @micro-zoe/micro-app, @vben/common-ui.
packages/effects/layouts/src/basic/content/content.vue Modified transformComponent function, adjusted rendering logic.
packages/effects/layouts/src/basic/content/use-content-spinner.ts Updated route guards to include to.meta.micro.
packages/effects/layouts/src/basic/index.ts Added export for content module.
packages/effects/layouts/src/index.ts Added export for micro module and LayoutUI namespace.
packages/effects/layouts/src/micro/index.ts Added export for MicroAppView.
packages/effects/layouts/src/micro/micro-app-view.vue Introduced new Vue component for micro-frontend integration.
playground/.env Updated variables: VITE_APP_TITLE, VITE_APP_NAMESPACE; added VITE_BASE.
playground/.env.analyze Removed variable: VITE_BASE.
playground/.env.development Removed variable: VITE_BASE.
playground/.env.production Removed variable: VITE_BASE; updated VITE_ROUTER_HISTORY.
playground/index.html Updated ID from app to micro-main-app, commented out Baidu analytics script.
playground/package.json Added dependencies: @micro-zoe/micro-app, @types/lodash-es, lodash-es.
playground/src/bootstrap.ts Updated mount target from #app to #micro-main-app.
playground/src/layouts/index.ts Added export for MicroAppView.
playground/src/preferences.ts Added property theme with sub-property mode.
playground/src/router/routes/modules/micro.ts Introduced new routes for micro-frontend.
playground/src/useMicro.ts Added functions for managing micro-frontend applications.
playground/vite.config.mts Updated server configuration to include open: true.
pnpm-workspace.yaml Added packages: @micro-zoe/micro-app, @types/lodash-es, lodash-es.

Possibly related PRs

Suggested labels

bug

Suggested reviewers

  • vince292007

🐰 In the meadow, changes bloom,
New paths for apps, dispelling gloom.
Micro-frontend hops in delight,
With loading indicators out of sight.
A sprinkle of code, a dash of cheer,
In the world of Vben, we persevere! 🌼

Warning

There were issues while running some tools. Please review the errors and either fix the tool’s configuration or disable the tool if it’s a critical failure.

🔧 eslint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

apps/web-antd/src/bootstrap.ts

Oops! Something went wrong! :(

ESLint: 9.15.0

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/node_modules/@vben/eslint-config/dist/index.mjs' imported from /eslint.config.mjs
at finalizeResolution (node:internal/modules/esm/resolve:257:11)
at moduleResolve (node:internal/modules/esm/resolve:914:10)
at defaultResolve (node:internal/modules/esm/resolve:1038:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:557:12)
at ModuleLoader.resolve (node:internal/modules/esm/loader:525:25)
at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:246:38)
at ModuleJob._link (node:internal/modules/esm/module_job:126:49)


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 15

🧹 Outside diff range and nitpick comments (32)
apps/web-antd/vite.config.mts (2)

8-8: Reconsider auto-opening browser in micro-frontend context

The open: true setting might not be ideal in a micro-frontend architecture where multiple applications run simultaneously. This could lead to multiple browser windows opening during development.

Consider making this configurable or defaulting to false:

-        open: true,
+        open: process.env.AUTO_OPEN === 'true',

Proxy configurations are consistent across micro-frontends with a minor target URL discrepancy

The proxy configurations are almost identical across all micro-frontend applications (web-antd, web-ele, web-naive, and playground), with the same path rewriting, changeOrigin, and overall structure. However, there's a minor inconsistency where playground uses '127.0.0.1' while others use 'localhost' in the target URL.

  • playground/vite.config.mts: uses http://127.0.0.1:5320/api
  • Other configs: use http://localhost:5320/api

While both URLs resolve to the same location, it's recommended to standardize the URL format across all configurations for consistency.

🔗 Analysis chain

Line range hint 9-16: Verify proxy configuration consistency across micro-frontends

Since this is part of a micro-frontend integration, ensure the proxy configuration aligns with other micro-frontend applications.

Let's verify the proxy configurations across the project:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check proxy configurations across all Vite configs
# to ensure consistency in micro-frontend setup

echo "Searching for all Vite config files..."
fd -e ts -e mts "vite.config" | while read -r file; do
  echo "\nChecking proxy configuration in $file:"
  rg -A 5 "proxy:\s*{" "$file"
done

Length of output: 1616


Script:

#!/bin/bash
# Let's fix the regex and try again
echo "Searching for all Vite config files..."
fd -e ts -e mts "vite.config" | while read -r file; do
  echo "\nChecking proxy configuration in $file:"
  rg -A 5 '"proxy"' "$file" || rg -A 5 'proxy:' "$file"
done

Length of output: 2238

apps/web-antd/src/router/routes/modules/demos.ts (2)

3-4: Remove outdated comment

The comment referencing "BasicLayout" is no longer relevant since the component has been replaced with LayoutContent.

-// BasicLayout
import { LayoutContent } from '#/layouts';

Line range hint 7-31: Consider micro-frontend routing requirements

Since this PR introduces micro-frontend integration, consider adding micro-frontend specific metadata to the route configuration. This could include:

  • Flags to indicate which routes should be accessible in micro-frontend context
  • Configuration for route synchronization with the parent application
  • Handling of shared state and navigation

Example enhancement:

 const routes: RouteRecordRaw[] = [
   {
     component: LayoutContent,
     meta: {
       icon: 'ic:baseline-view-in-ar',
       keepAlive: true,
       order: 1000,
       title: $t('demos.title'),
+      microApp: {
+        shared: true,
+        syncRoute: true
+      }
     },
     name: 'Demos',
     // ... rest of the configuration
   }
 ];
playground/index.html (1)

Inconsistent analytics implementation across applications

The Baidu analytics script is commented out only in the playground app but remains active in all other applications (web-antd, web-ele, web-naive). This inconsistency suggests that the analytics removal was not intended to be a global change. Each app also uses a different tracking ID, indicating separate analytics configurations:

  • playground: d20a01273820422b6aa2ee41b6c9414d (commented)
  • web-antd: b38e689f40558f20a9a686d7f6f33edf (active)
  • web-ele: 97352b16ed2df8c3860cf5a1a65fb4dd (active)
  • web-naive: 24bb3eb91dfe4ebfcbcee6952a107cb6 (active)
🔗 Analysis chain

Line range hint 17-29: Verify the intentional removal of analytics tracking.

The Baidu analytics script has been commented out, which will disable user tracking in production. Please confirm if this is intentional and if there are alternative analytics solutions in place.

Run the following script to check for any alternative analytics implementations:


Let me generate one more verification script to check if the Baidu analytics script is still active or commented out in other apps:

This will help us verify if the analytics removal is consistent across all apps and if it's part of a broader strategy.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for analytics-related code in the codebase

# Search for analytics-related patterns
echo "Checking for alternative analytics implementations..."
rg -i "analytics|tracking|hm\.baidu\.com|google-analytics|gtag" --type html --type ts --type js

# Check if similar changes were made in web-antd
echo "Verifying consistent analytics removal across apps..."
rg -l "hm\.baidu\.com" apps/web-antd/

Length of output: 9038


Script:

#!/bin/bash
# Check the status of Baidu analytics script across all apps
echo "Checking analytics script status in all app entry points..."
for file in playground/index.html apps/web-*/index.html; do
  echo "=== $file ==="
  # Get 3 lines before and after any line containing baidu.com to see if it's commented
  rg -C 3 "hm\.baidu\.com" "$file"
done

Length of output: 2019

playground/src/bootstrap.ts (1)

Line range hint 19-54: Implementation looks good, consider adding documentation

The bootstrap implementation correctly integrates micro-frontend support while maintaining a clear separation of concerns. Consider adding:

  1. JSDoc comments for the bootstrap function describing its purpose and parameters
  2. Documentation about the micro-frontend lifecycle and initialization process

Add JSDoc comments:

+/**
+ * Bootstraps the application with micro-frontend support
+ * @param namespace - The namespace for store initialization
+ * @returns Promise<void>
+ */
 async function bootstrap(namespace: string) {
packages/effects/layouts/src/basic/content/use-content-spinner.ts (1)

31-36: LGTM! Consider adding TypeScript types

The addition of to.meta.micro check is a good enhancement to support micro-frontend routes. The implementation maintains consistency between both route guards.

Consider adding TypeScript types to improve type safety:

interface RouteMeta {
  loaded?: boolean;
  iframeSrc?: string;
  micro?: boolean;
}

// Update route guard parameter
router.beforeEach((to: { meta: RouteMeta }) => {
  // ... existing code
});

router.afterEach((to: { meta: RouteMeta }) => {
  // ... existing code
});

Also applies to: 46-51

playground/src/router/routes/modules/micro.ts (2)

4-4: Consider implementing internationalization support

The commented-out localization imports and usage suggest that i18n support was planned but not implemented. Consider implementing proper internationalization to support multiple languages.

Would you like help implementing the localization setup using the $t function?

Also applies to: 12-13


8-16: Consider documenting the significance of the order value

The order: 1000 seems to be a magic number. Consider adding a comment explaining its significance in the routing hierarchy or consider defining it as a constant with a meaningful name.

packages/effects/layouts/src/micro/micro-app-view.vue (5)

7-8: Clean up commented code or document its purpose.

The commented import of EventCenterForMicroApp suggests potential future functionality or removed code. If it's needed for future implementation, please add a TODO comment explaining the intended use. Otherwise, remove it to maintain clean code.


11-17: Enhance type safety and add documentation for the IMicro interface.

While the interface captures the essential properties, consider these improvements:

  1. Add JSDoc comments explaining the purpose of each property
  2. Consider removing the index signature [key: string]: any to enforce stricter type checking
+/**
+ * Interface defining the structure of a micro-frontend configuration
+ */
 interface IMicro {
+  /** Unique identifier for the micro-frontend */
   name: string;
+  /** Hash value for routing */
   hash: string;
+  /** Host URL where the micro-frontend is served */
   host: string;
+  /** Base route for the micro-frontend */
   baseroute: string;
-  [key: string]: any;
 }

32-48: Enhance error state UX and add loading state handling.

The current error state could be more user-friendly and informative:

  1. Raw JSON output might not be helpful for users
  2. Error messages should be in English
  3. Consider adding a loading state
 <template>
   <Page class="h-1/1 micro-view !m-0 !p-0">
+    <div v-if="loading" class="flex h-full items-center justify-center">
+      <Spin />
+    </div>
     <micro-app
-      v-if="microData"
+      v-else-if="microData"
       :baseroute="microData.baseroute"
       :data="microData"
       :level="2"
       :name="microData.name"
       :url="microData.host"
     />
     <div v-else class="flex h-full flex-col justify-center">
-      <p class="mt-2">{{ JSON.stringify(microData) }}</p>
-      <p class="mt-2">子服务 加载异常</p>
-      <p class="mt-2">异常详情在控制台查看</p>
+      <Alert
+        type="error"
+        message="Micro-frontend Loading Error"
+        description="Failed to load the micro-frontend service. Please check the console for detailed information."
+        show-icon
+      />
     </div>
   </Page>
 </template>

49-56: Review the use of !important and selector specificity.

The current styling approach raises some concerns:

  1. Usage of !important suggests potential style conflicts that should be resolved through proper CSS specificity
  2. The direct child selector & > div might be too broad and could affect unintended elements

Consider using more specific selectors and removing !important:

 .micro-view {
-  & > div {
+  &__container {
-    padding: 0 !important;
-    margin: 0 !important;
+    padding: 0;
+    margin: 0;
   }
 }

Then update the template accordingly:

-<div v-else class="flex h-full flex-col justify-center">
+<div v-else class="micro-view__container flex h-full flex-col justify-center">

1-56: Consider adding crucial micro-frontend architectural patterns.

The component would benefit from additional architectural patterns common in micro-frontend implementations:

  1. Error boundaries to prevent cascading failures
  2. Retry mechanisms for failed loads
  3. Cross-application communication handlers
  4. Loading and error states management
  5. Lifecycle hooks for cleanup

Would you like me to provide examples of these patterns?

apps/web-antd/src/router/routes/modules/vben.ts (2)

11-12: Remove unnecessary comment

The commented line "// BasicLayout" is redundant since the component is no longer used.

-// BasicLayout
import { IFrameView, LayoutContent } from '#/layouts';

Line range hint 31-78: Consider architectural implications of iframe usage in micro-frontend context

The current implementation uses IFrameView for external content (docs, GitHub, previews). In a micro-frontend architecture, consider:

  1. Security: Ensure proper Content Security Policy (CSP) headers for iframe content
  2. Performance: Multiple iframes might impact application performance
  3. User Experience: Consider lazy loading strategies for iframe content

Consider implementing a more integrated approach using micro-frontend capabilities instead of iframes for better performance and user experience.

packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue (2)

Line range hint 6-15: Add missing English documentation and consider increasing default loading time.

  1. The spinning prop is missing English documentation.
  2. Consider increasing the default minLoadingTime to prevent flickering (common practice is 200-300ms).
  /**
   * @zh_CN loading状态开启
+  * @en_US Enable loading state
   */
  spinning?: boolean;

Line range hint 20-57: Address potential memory leak and clean up commented code.

  1. The component should clean up the timer when unmounted to prevent memory leaks.
  2. Remove commented performance tracking code if it's no longer needed.

Add onBeforeUnmount hook to clean up the timer:

import { ref, watch } from 'vue';
+import { onBeforeUnmount } from 'vue';

// ... existing code ...

-// const startTime = ref(0);
const showSpinner = ref(false);
const renderSpinner = ref(true);
const timer = ref<ReturnType<typeof setTimeout>>();

+onBeforeUnmount(() => {
+  clearTimeout(timer.value);
+});

watch(
  () => props.spinning,
  (show) => {
    if (!show) {
      showSpinner.value = false;
      clearTimeout(timer.value);
      return;
    }

-    // startTime.value = performance.now();
    timer.value = setTimeout(() => {
-      // const loadingTime = performance.now() - startTime.value;
      showSpinner.value = true;
      if (showSpinner.value) {
        renderSpinner.value = true;
      }
    }, props.minLoadingTime);
  },
  {
    immediate: true,
  },
);
packages/@core/composables/src/use-layout-style.ts (2)

32-33: LGTM! The viewport-relative height calculation improves layout flexibility.

The change from fixed height to viewport-relative minimum height (calc(100vh - ${top}px)) is a good improvement that provides better layout containment for micro-frontend integration. This ensures the overlay properly fills the available space while maintaining correct positioning.


32-32: Remove commented code.

The commented calculation should be removed as it's no longer needed and could cause confusion. If needed, this information can be preserved in the git history.

-      // height: `calc(100vh - ${top}px)`, //`${height}px`,
packages/@core/base/typings/src/vue-router.d.ts (1)

101-109: LGTM! Consider enhancing the documentation.

The micro property is well-structured for micro-frontend configuration. However, the documentation could be more detailed.

Consider expanding the documentation to provide more context:

  /**
   * 微服务配置
+  * Used for configuring micro-frontend routes
+  * @property baseroute - Base route path for the micro-app navigation
+  * @property hash - Hash mode configuration for the micro-app
+  * @property host - Host URL where the micro-app is deployed
+  * @property name - Unique identifier for the micro-app
   */
  micro?: {
    baseroute: string; // 微服务基础路由
    hash: string; // 微服务 hash
    host: string; // 微服务地址
    name: string; // 微服务名称
  };
packages/effects/layouts/src/basic/content/content.vue (1)

84-84: Remove commented debug code.

Debug statements like console.clear() should be removed rather than commented out, as they can create noise in the codebase.

-// console.clear();
apps/web-antd/src/useChildMicro.ts (4)

1-6: Clean up unnecessary comments and ensure consistency in documentation language.

The file contains unnecessary import comments and mixed language usage in comments. Consider removing the non-descriptive comments and maintaining English throughout the codebase for consistency.

-// 子服务设置
-
-// useUserStore
import { useAccessStore } from '@vben/stores';
-// preferences
import { updatePreferences } from '@vben/preferences';

12-24: Add JSDoc documentation for the Window interface extension.

The global Window interface extension is missing documentation for its purpose and usage. Consider adding comprehensive JSDoc documentation to improve maintainability.

+/**
+ * Extends the global Window interface with micro-frontend capabilities.
+ * Provides typing for micro-app specific properties and methods used in the application.
+ */
declare global {
  interface Window {
    microApp: {
      dispatch(data: { AppName: string; data: unknown }): void;
      getData(): Record<string, unknown>;
    } & EventCenterForMicroApp;
    __MICRO_APP_NAME__: string;
    __MICRO_APP_ENVIRONMENT__: string;
    __MICRO_APP_BASE_APPLICATION__: string;
  }
}

37-41: Enhance interface documentation and type specificity.

While the interface is well-structured, consider:

  1. Adding JSDoc comments for each property
  2. Using a more specific type for mainPreferences instead of Record<string, unknown>
 interface IMicroAppData {
+  /** Authentication token for the micro-frontend application */
   accessToken?: string /* token */;
+  /** Target route hash for navigation */
   hash?: string /* 路由地址 */;
+  /** System configuration preferences from the main application */
-  mainPreferences?: Record<string, unknown> /* 系统配置项 */;
+  mainPreferences?: {
+    theme?: string;
+    locale?: string;
+    [key: string]: unknown;
+  };
 }

54-77: Remove commented out debug code.

The file contains multiple blocks of commented out code that should be removed to improve maintainability.

-    // Object.keys(data).forEach((key) => {
-    //   console.warn(`子应用获得基座数据 ${key}: `, data[key]);
-    // });
-    // // 向基座发送数据
-    // setTimeout(() => {
-    //   // MAIN_ROUTER.push('/');
-    //   window.microApp.dispatch({
-    //     AppName: data.AppName,
-    //     data: '向基座发送数据' + data.hash,
-    //   });
-    // }, 3000);
packages/@core/base/design/src/css/global.css (1)

Line range hint 31-36: Consider adding micro-frontend isolation styles.

For better micro-frontend integration, consider adding isolation styles to prevent style leakage between the main app and micro apps.

Add these styles within the existing selector:

  .app,
  #app,
  body,
  html {
    @apply size-full;
+   /* Micro-frontend isolation */
+   @apply relative;
+   
+   /* Prevent style leakage */
+   micro-app {
+     @apply isolation-auto;
+   }
  }
apps/web-antd/src/bootstrap.ts (3)

74-74: Standardize console messages to a single language

The console warning combines Chinese and English: '微应用卸载了,微应用的 unmount() fired'. For consistency and maintainability, consider standardizing all console messages to a single language or implementing localization.

You could update the console message to be entirely in English:

-  console.warn('微应用卸载了,微应用的 unmount() fired');
+  console.warn('Micro application has been unmounted, micro app\'s unmount() fired');

79-79: Standardize console messages to a single language

The console warning uses Chinese: '检测微应用环境'. To maintain consistency across the codebase, consider using a single language for all log messages or implementing a localization strategy.

Update the console message as follows:

-    console.warn('检测微应用环境', window.__MICRO_APP_ENVIRONMENT__);
+    console.warn('Micro-frontend environment detected', window.__MICRO_APP_ENVIRONMENT__);

89-89: Standardize console messages to a single language

The console warning is in Chinese: '非微前端环境'. For consistency, consider translating it to English or ensuring all log messages are localized appropriately.

Here's the updated console message:

-    console.warn('非微前端环境');
+    console.warn('Non-micro-frontend environment');
playground/src/useMicro.ts (2)

34-34: Refine Logging Statements in Lifecycle Methods

The lifecycle methods afterhidden, aftershow, and beforeshow log the CustomEvent object directly, which may result in uninformative messages like "[object CustomEvent]". Consider extracting relevant properties from the event for clearer logging.

Suggested changes:

- console.warn(`子应用${e}推入后台时`);
+ console.warn(`子应用${e.detail.appName || e.type}推入后台时`);

Apply similar changes to aftershow and beforeshow methods to enhance the clarity of the logs.

Also applies to: 37-37, 43-43


89-91: Externalize Hardcoded URLs for Maintainability

The URL 'http://localhost:5777/vben-antd/' is hardcoded, which may not be suitable for different environments or deployment scenarios. Consider externalizing this URL using environment variables or configuration files to improve flexibility and maintainability.

Suggested changes:

+ const VBEN_ANTD_URL = import.meta.env.VITE_VBEN_ANTD_URL || 'http://localhost:5777/vben-antd/';

...

code = code.replaceAll(
  /(from|import)(\s*['"])(\/vben-antd\/)/g,
  (all: string) => {
    return all.replace(
      '/vben-antd/',
-     'http://localhost:5777/vben-antd/',
+     VBEN_ANTD_URL,
    );
  },
);

Ensure to define VITE_VBEN_ANTD_URL in your environment variables for different environments.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between dbcb713 and d5b3720.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (41)
  • apps/web-antd/.env (1 hunks)
  • apps/web-antd/.env.analyze (1 hunks)
  • apps/web-antd/.env.development (1 hunks)
  • apps/web-antd/.env.production (0 hunks)
  • apps/web-antd/index.html (2 hunks)
  • apps/web-antd/package.json (1 hunks)
  • apps/web-antd/src/bootstrap.ts (3 hunks)
  • apps/web-antd/src/layouts/index.ts (1 hunks)
  • apps/web-antd/src/preferences.ts (1 hunks)
  • apps/web-antd/src/router/access.ts (2 hunks)
  • apps/web-antd/src/router/routes/modules/dashboard.ts (1 hunks)
  • apps/web-antd/src/router/routes/modules/demos.ts (1 hunks)
  • apps/web-antd/src/router/routes/modules/vben.ts (1 hunks)
  • apps/web-antd/src/useChildMicro.ts (1 hunks)
  • apps/web-antd/vite.config.mts (1 hunks)
  • internal/vite-config/src/plugins/index.ts (1 hunks)
  • internal/vite-config/src/plugins/nitro-mock.ts (2 hunks)
  • packages/@core/base/design/src/css/global.css (1 hunks)
  • packages/@core/base/typings/src/vue-router.d.ts (1 hunks)
  • packages/@core/composables/src/use-layout-style.ts (1 hunks)
  • packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue (1 hunks)
  • packages/effects/layouts/package.json (2 hunks)
  • packages/effects/layouts/src/basic/content/content.vue (4 hunks)
  • packages/effects/layouts/src/basic/content/use-content-spinner.ts (2 hunks)
  • packages/effects/layouts/src/basic/index.ts (1 hunks)
  • packages/effects/layouts/src/index.ts (1 hunks)
  • packages/effects/layouts/src/micro/index.ts (1 hunks)
  • packages/effects/layouts/src/micro/micro-app-view.vue (1 hunks)
  • playground/.env (1 hunks)
  • playground/.env.analyze (0 hunks)
  • playground/.env.development (0 hunks)
  • playground/.env.production (1 hunks)
  • playground/index.html (2 hunks)
  • playground/package.json (2 hunks)
  • playground/src/bootstrap.ts (2 hunks)
  • playground/src/layouts/index.ts (1 hunks)
  • playground/src/preferences.ts (1 hunks)
  • playground/src/router/routes/modules/micro.ts (1 hunks)
  • playground/src/useMicro.ts (1 hunks)
  • playground/vite.config.mts (1 hunks)
  • pnpm-workspace.yaml (3 hunks)
💤 Files with no reviewable changes (3)
  • apps/web-antd/.env.production
  • playground/.env.analyze
  • playground/.env.development
✅ Files skipped from review due to trivial changes (7)
  • apps/web-antd/.env
  • apps/web-antd/.env.analyze
  • apps/web-antd/.env.development
  • apps/web-antd/src/preferences.ts
  • apps/web-antd/src/router/routes/modules/dashboard.ts
  • packages/effects/layouts/src/micro/index.ts
  • playground/.env
🔇 Additional comments (44)
packages/effects/layouts/src/basic/index.ts (2)

1-1: Verify the impact of wildcard exports

The wildcard export makes all entities from './content' accessible through this module. Let's verify what exactly is being exported to ensure we're not exposing unintended entities.

✅ Verification successful

Wildcard export is safe and well-structured

The wildcard export from './content' is exporting two well-defined components (LayoutContent, LayoutContentSpinner) and one utility function (useContentSpinner). This aligns with the layout restructuring objective and maintains a clean public API through the basic layout module.

  • All exports from the content module are layout-specific and properly prefixed
  • The exports complement the existing BasicLayout export
  • The structure follows a consistent pattern seen across other layout components (header, footer, menu, etc.)
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check the exports from the content module
# Expected: List of exported entities from the content module

# Check for exported entities in the content module
ast-grep --pattern 'export $_' packages/effects/layouts/src/basic/content.ts

# Check for any files importing from this module to understand usage
rg -l "from ['\"]@/layouts/basic['\"]" || rg -l "from ['\"].*layouts/src/basic['\"]"

Length of output: 265


Script:

#!/bin/bash
# Let's first check if the content.ts file exists and its location
fd content.ts

# Check the directory structure under layouts
fd . packages/effects/layouts/src/basic

# Look for any exports related to content or layout in the basic directory
rg "export.*content|export.*layout" --ignore-case packages/effects/layouts/src/basic

Length of output: 2785


2-2: Clarify the migration strategy for BasicLayout

According to the PR objectives, BasicLayout is being replaced with LayoutContent in various modules. However, this file still exports BasicLayout. Please clarify:

  1. Is BasicLayout being gradually phased out?
  2. Should we add a deprecation notice if this is temporary?
  3. Are there any remaining dependencies on BasicLayout that prevent its immediate removal?
packages/effects/layouts/src/index.ts (2)

4-4: Verify the micro module implementation

The export aligns with the PR's micro-frontend integration objectives. Let's verify the micro module's implementation.

✅ Verification successful

Export from micro module is properly implemented and used

The verification confirms that:

  • The micro module exists at packages/effects/layouts/src/micro/
  • It exports the MicroAppView component from micro-app-view.vue
  • The component is properly imported and used in the playground routes
  • The export statement in index.ts correctly exposes the module
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the micro module implementation
# Expected: Find the micro module and its contents

# Check if the micro directory exists and show its contents
fd --type f --base-directory packages/effects/layouts/src micro/

# Look for MicroAppView component mentioned in the summary
rg -t vue "MicroAppView" packages/effects/layouts/src/micro/

Length of output: 485


Script:

#!/bin/bash
# Let's try a different approach to verify the micro module

# Check if the micro directory exists and list its contents
fd micro packages/effects/layouts/src

# Look for any files containing MicroAppView
rg "MicroAppView"

# Check for any TypeScript files in the micro directory
fd -e ts micro packages/effects/layouts/src

# Look for exports from micro module
rg "from './micro'" packages/effects/layouts/src

Length of output: 890


7-7: Verify the layout-ui dependency integration

The LayoutUI namespace export aligns with the PR's layout adjustment objectives. Let's verify the dependency and its integration.

✅ Verification successful

Dependency and usage verification completed successfully

The @vben-core/layout-ui package is:

  • Properly declared as a workspace dependency in packages/effects/layouts/package.json
  • Located at packages/@core/ui-kit/layout-ui
  • Correctly used in:
    • packages/effects/layouts/src/basic/layout.vue (imports VbenAdminLayout)
    • apps/web-antd/src/layouts/index.ts (re-exports LayoutUI)
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify layout-ui dependency and its usage
# Expected: Find the dependency and its usage in the project

# Check if the dependency is properly declared
rg -l "@vben-core/layout-ui" "**/package.json"

# Look for LayoutUI usage in the codebase
rg "LayoutUI\." --type ts

Length of output: 130


Script:

#!/bin/bash
# Let's try a different approach to verify the dependency and its usage

# First, let's find all package.json files
fd "package.json"

# Then check for any references to layout-ui in the codebase
rg -i "layout-ui"

# Also search for potential usages of LayoutUI
rg -i "layoutui" --type ts

# Look for the actual @vben-core directory or package
fd "vben-core"

Length of output: 2801

playground/.env.production (2)

11-11: Verify server configuration for History mode routing

Switching from hash to history mode requires proper server configuration to handle SPA routing. Ensure that the server is configured to redirect all routes to index.html, otherwise direct URL access will result in 404 errors.

Example nginx configuration needed:

location / {
  try_files $uri $uri/ /index.html;
}

11-11: Verify routing consistency across micro-frontends

The change to history mode routing needs to be consistent across all micro-frontend applications to prevent routing conflicts.

Run the following to check routing configurations across all apps:

✅ Verification successful

Let me gather more specific information about the router configuration in these files.


Router configuration is consistent across all micro-frontends

The verification shows that all micro-frontend applications (playground, web-ele, web-naive, and web-antd) use the same router configuration pattern that reads from VITE_ROUTER_HISTORY environment variable. They all consistently switch between hash and history modes based on this variable's value. The change to history mode in playground's production environment will work correctly as all applications follow the same configuration pattern.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check routing mode configuration across all apps
# Look for router configuration files and env files

# Search for router configuration files
echo "Checking router configuration files:"
rg -l "createRouter|history|hash" --type ts

# Search for VITE_ROUTER_HISTORY in all env files
echo -e "\nChecking environment files:"
fd -e .env -e .env.development -e .env.production -x cat {} \; -x echo "--- {} ---" \;

Length of output: 1228


Script:

#!/bin/bash
# Check the actual router configuration in the main router files
echo "Checking main router configuration in playground:"
rg -A 5 "createRouter" playground/src/router/index.ts

echo -e "\nChecking main router configuration in web-ele:"
rg -A 5 "createRouter" apps/web-ele/src/router/index.ts

echo -e "\nChecking main router configuration in web-naive:"
rg -A 5 "createRouter" apps/web-naive/src/router/index.ts

echo -e "\nChecking main router configuration in web-antd:"
rg -A 5 "createRouter" apps/web-antd/src/router/index.ts

# Check for router history mode configuration in env files
echo -e "\nChecking VITE_ROUTER_HISTORY in all env files:"
rg "VITE_ROUTER_HISTORY" -A 1 -B 1

Length of output: 4285

playground/src/layouts/index.ts (2)

6-6: LGTM! Clean export implementation.

The export statement maintains consistency with the existing pattern while adding the new MicroAppView component.


5-5: LGTM! Verify @vben/layouts module.

The dynamic import implementation follows the existing pattern and supports code splitting. Let's verify the module exists and exports the expected component.

✅ Verification successful

MicroAppView component exists and is properly integrated

The component is correctly implemented and exported:

  • Found in packages/effects/layouts/src/micro/micro-app-view.vue
  • Properly exported via packages/effects/layouts/src/micro/index.ts
  • Successfully imported and used in multiple places including router configuration
  • Implementation shows it's a Vue component that handles micro-frontend integration using @micro-zoe/micro-app
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the MicroAppView component exists in @vben/layouts

# Search for MicroAppView export in the codebase
ast-grep --pattern 'export { $$$ MicroAppView $$$ }'

# Search for MicroAppView component definition
ast-grep --pattern 'const MicroAppView = $$$'

Length of output: 216


Script:

#!/bin/bash
# Search for MicroAppView in @vben/layouts package source
fd -g "*.{ts,tsx,js,jsx}" -d 3 layouts | xargs rg "MicroAppView" -A 2

# Search for any exports containing MicroAppView
rg "export.*MicroAppView"

# Search for component definition using AST
ast-grep --pattern 'class MicroAppView {
  $$$
}'

ast-grep --pattern 'function MicroAppView($$$) {
  $$$
}'

ast-grep --pattern 'const MicroAppView = $$$' -l

Length of output: 1601


Script:

#!/bin/bash
# Check the content of the micro-app-view.vue file
rg -p "packages/effects/layouts/src/micro/micro-app-view.vue" -l
cat "packages/effects/layouts/src/micro/micro-app-view.vue" 2>/dev/null

# Verify the import path in the module system
rg -p "@vben/layouts" --type ts

# Check if the component is properly exported from the package
rg -p "from '@vben/layouts'" --type ts

Length of output: 2236

playground/src/preferences.ts (2)

13-15: LGTM! Theme configuration looks good.

The addition of automatic theme mode provides a good default for system preference-based theming.


13-15: Consider theme synchronization in micro-frontend context.

Since this is part of a micro-frontend implementation, consider how theme preferences will be synchronized between the main application and child micro-apps. You might need to:

  1. Implement theme state sharing mechanism between parent and child applications
  2. Handle theme change propagation across micro-frontend boundaries
  3. Ensure consistent theme application across all micro-frontend components

Let's check if there are any theme-related handlers in the micro-frontend setup:

apps/web-antd/src/layouts/index.ts (2)

9-9: LGTM! Export statement is properly updated.

The export statement maintains a clean, alphabetically ordered list of all components, aligning with the PR's layout adjustment objectives.


5-7: LGTM! The new layout component imports follow existing patterns.

The dynamic imports maintain consistency with the existing code structure and follow code splitting best practices.

Let's verify the '@vben/layouts' package and component usage:

✅ Verification successful

The dynamic imports of LayoutUI and LayoutContent are valid and properly configured

The verification shows that:

  1. The @vben/layouts package exists and is properly configured in the workspace
  2. The package exports both LayoutUI and LayoutContent components:
    • LayoutUI is re-exported from @vben-core/layout-ui
    • LayoutContent is exported from content.vue

The dynamic imports in apps/web-antd/src/layouts/index.ts follow the correct pattern for code splitting and maintain consistency with existing imports.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Verify package existence and component usage

# Check if @vben/layouts is properly configured
fd -t f "package.json" | xargs rg "@vben/layouts"

# Check usage of new components
rg -t typescript -t vue "LayoutUI|LayoutContent" --type-add "vue:*.vue"

Length of output: 470


Script:

#!/bin/bash
# Let's verify the package and component usage with correct file types

# Check the actual layout components in @vben/layouts package
fd . "packages/effects/layouts" -t f -e ts -e tsx -e vue | xargs cat

# Search for usage with proper file extensions
rg "LayoutUI|LayoutContent" --type-add 'ts:*.{ts,tsx}' --type-add 'vue:*.vue' -t ts -t vue

Length of output: 130841


Script:

#!/bin/bash
# Let's check the package contents and usage with a more focused search

# Check the actual exports from @vben/layouts package
fd . "packages/effects/layouts/src" -t f -e ts -e tsx | xargs cat

# Search for imports/usage of these components
rg "import.*\{.*(?:LayoutUI|LayoutContent).*\}.*from.*@vben/layouts" --type-add 'ts:*.{ts,tsx}' --type-add 'vue:*.vue' -t ts -t vue

Length of output: 17895

playground/vite.config.mts (1)

8-8: LGTM: Developer experience improvement

The addition of open: true enhances developer workflow by automatically launching the browser when the server starts.

apps/web-antd/src/router/access.ts (2)

12-12: LGTM! Import addition aligns with layout requirements.

The addition of LayoutContent to the imports is consistent with the PR's objective to enhance layout handling.


22-22: Verify the impact of LayoutContent on existing routes.

The addition of LayoutContent to layoutMap enables its use in route generation. Since this is a significant layout change, we should verify its integration with existing routes.

✅ Verification successful

Let me check the actual route configurations to understand how LayoutContent is being used and if there's any potential conflict with BasicLayout.


LayoutContent is properly integrated with existing routes

The verification shows that LayoutContent is already being used consistently in the demo routes (vben.ts and demos.ts) while BasicLayout serves a different purpose in dashboard routes. This is a valid coexistence pattern where:

  • LayoutContent is used for content-focused routes (demos and vben sections)
  • BasicLayout is retained for the dashboard section which likely requires a different layout structure
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check usage of LayoutContent in route configurations
# Expected: Find routes that have been updated to use LayoutContent

# Search for route configurations using LayoutContent
echo "Searching for LayoutContent usage in route configurations..."
rg -l "component.*LayoutContent" "apps/web-antd/src/router/routes/"

# Check for any remaining BasicLayout usage that might need updating
echo "Checking for remaining BasicLayout usage..."
rg -l "component.*BasicLayout" "apps/web-antd/src/router/routes/"

Length of output: 511


Script:

#!/bin/bash
# Check the actual implementation of routes using LayoutContent and BasicLayout
echo "Checking LayoutContent usage in vben.ts..."
rg "component.*LayoutContent" "apps/web-antd/src/router/routes/modules/vben.ts" -A 5

echo "\nChecking LayoutContent usage in demos.ts..."
rg "component.*LayoutContent" "apps/web-antd/src/router/routes/modules/demos.ts" -A 5

echo "\nChecking BasicLayout usage in dashboard.ts..."
rg "component.*BasicLayout" "apps/web-antd/src/router/routes/modules/dashboard.ts" -A 5

Length of output: 1006

apps/web-antd/index.html (2)

Line range hint 17-29: Verify the removal of Baidu analytics tracking

The Baidu analytics script has been commented out. Please confirm if this is intentional and whether analytics tracking should be handled differently in the micro-frontend architecture (e.g., by the parent application).

Run the following script to check for any other analytics implementations:


32-32: Verify consistent usage of the new container ID

The root container ID has been changed from app to antd-app to support micro-frontend integration. This change requires corresponding updates in other files.

Run the following script to verify consistent usage of the new ID:

Consider adding a comment in the HTML explaining the purpose of the ID change and its relationship to the micro-frontend architecture. This will help future maintainers understand the reasoning behind these specific IDs.

✅ Verification successful

Let me try a different search strategy to verify the ID usage.

This script will help us:

  1. Find mount/initialization code with any container ID
  2. Locate and examine bootstrap files that typically contain app initialization
  3. Get a broader view of how the application is mounted

Based on the search results, I can see that the ID change is consistently implemented:

  1. In apps/web-antd/src/bootstrap.ts, the mount point is correctly using #antd-app
  2. In apps/web-antd/index.html, the container has the new ID antd-app
  3. Other apps like web-naive and web-ele maintain their own separate mount points (#app)

This aligns with the micro-frontend architecture where each app needs its own unique mount point. Let me generate the final response:

ID change is correctly implemented for micro-frontend integration

The container ID change from app to antd-app is properly synchronized with the mount point in the bootstrap code, and this change appropriately isolates the Ant Design app's mount point from other micro-frontend apps in the system.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for references to both old and new container IDs
echo "Checking for old 'app' ID references that might need updating..."
rg "#app['\"]|getElementById\(['\"]app" --type ts --type js --type vue

echo "Verifying usage of new 'antd-app' ID..."
rg "#antd-app['\"]|getElementById\(['\"]antd-app" --type ts --type js --type vue

echo "Checking mount/unmount implementations..."
ast-grep --pattern 'createApp($app).mount("#app")'

Length of output: 605


Script:

#!/bin/bash
# Search for any references to app mounting/initialization
echo "Searching for mount/initialization patterns..."
rg -t js -t ts "mount\(.*#.*\)|getElementById\(.*\)"

echo "Searching for bootstrap or main files..."
fd -e ts -e js "bootstrap|main|index" --type f

echo "Checking content of potential bootstrap files..."
for file in $(fd -e ts -e js "bootstrap|main|index" --type f); do
  echo "=== Content of $file ==="
  cat "$file"
done

Length of output: 145977

playground/index.html (1)

32-32: Verify micro-frontend integration points.

The app container has been updated to use micro-main-app ID and app class, which is crucial for micro-frontend architecture. This change needs to be consistent with the mounting points in the bootstrap code and any child micro-apps.

Run the following script to verify the integration points:

✅ Verification successful

The micro-frontend integration point is correctly configured

The verification shows that the micro-main-app mounting point in playground/index.html is consistent with the bootstrap configuration:

  • The mounting point #micro-main-app is correctly used in playground/src/bootstrap.ts
  • The micro-frontend setup is properly configured in playground/src/useMicro.ts
  • The integration is part of a larger micro-frontend architecture as evidenced by related configurations in multiple files
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify consistency of micro-frontend integration

# Check mounting point in bootstrap files
echo "Checking mounting points in bootstrap files..."
rg "micro-main-app" --type ts

# Check for micro-app configurations
echo "Checking micro-app configurations..."
ast-grep --pattern 'createApp($app).mount("#micro-main-app")'

# Check for related class usage
echo "Checking .app class usage..."
rg "\.app\s*{" --type css

Length of output: 582


Script:

#!/bin/bash
# Let's verify with corrected commands and gather more context

# Check mounting points and related code
echo "Checking mounting points and related code..."
rg "micro-main-app" -t ts -A 3 -B 3

# Check for app class usage with fixed regex
echo "Checking .app class usage..."
rg "\.app\s?\{" -t css

# Check main app configuration
echo "Checking main app configuration..."
fd bootstrap.ts --exec cat {}

# Check for any micro-frontend related configuration
echo "Checking micro-frontend configuration..."
fd -e ts -e js -e json | xargs rg "micro|qiankun|wujie" -l

Length of output: 7329

playground/src/bootstrap.ts (2)

17-17: Verify the existence and implementation of useMicro module

The imported module is crucial for micro-frontend initialization.

✅ Verification successful

Let me verify the implementation of the microAppInit export since we confirmed the file exists but need to check its contents.


Let me try a different approach to check the implementation using ripgrep to see the actual content of the file.


Import of microAppInit is correctly implemented

The module exists at playground/src/useMicro.ts and exports the microAppInit function as expected. The implementation shows it's properly configured for micro-frontend initialization with router integration and appropriate micro-app settings.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the existence and implementation of useMicro module
# Expected: Find the module and its microAppInit export

# Check if the file exists
fd -t f "useMicro.ts" playground/src

# Verify the export
ast-grep --pattern 'export { microAppInit }' playground/src

Length of output: 125


Script:

#!/bin/bash
# Check the implementation of microAppInit in useMicro.ts
ast-grep --pattern 'export const microAppInit = $_' playground/src

Length of output: 68


Script:

#!/bin/bash
# Check the content of useMicro.ts to understand the implementation
rg -A 10 "microAppInit" playground/src/useMicro.ts

Length of output: 439


25-26: Verify the initialization order and improve documentation

The micro-app initialization is placed between component adapter and i18n setup. Consider:

  1. Documenting why this specific initialization order is necessary
  2. Translating the Chinese comment to English for better international collaboration

Consider updating the comment to English:

-  // 初始化微应用
+  // Initialize micro-application
✅ Verification successful

Let me gather more information about the micro-app initialization dependencies and configuration.


Based on the search results, I can now generate the final response as I have sufficient information about the initialization order across different applications in the codebase.

Consider keeping the current initialization order and update documentation

The micro-app initialization order (after component adapter, before i18n) appears to be intentional as it's specific to the playground app, while other apps (web-antd, web-ele, web-naive) don't initialize micro-apps at all. The current order in playground is correct because:

  1. Component adapter needs to be initialized first as it's a core dependency
  2. Micro-app initialization requires router but doesn't depend on i18n
  3. i18n setup can safely run after micro-app initialization as it only affects the main app's localization

Suggestions:

  • Keep the Chinese comment but add English translation above it:
+  // Initialize micro-application
   // 初始化微应用
   await microAppInit(router);
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify if the initialization order is consistent across the codebase
# Expected: Find similar patterns in other bootstrap files

# Search for similar initialization patterns
rg -B 5 -A 5 "microAppInit.*router" --type ts

Length of output: 1188


Script:

#!/bin/bash
# Check for any dependencies between micro-app and i18n initialization
rg -B 10 -A 10 "setupI18n|microAppInit" --type ts

# Look for any configuration or documentation about initialization order
fd -e md -e ts -H -I . -x rg -l "initialization|bootstrap.*order"

Length of output: 22019

packages/effects/layouts/src/basic/content/use-content-spinner.ts (1)

31-36: Verify micro-frontend route configurations

Let's ensure that routes using micro-frontend components properly set the meta.micro property.

Also applies to: 46-51

✅ Verification successful

Micro-frontend integration is properly configured

The verification confirms that the meta.micro check in use-content-spinner.ts is correctly integrated with the micro-frontend setup:

  • The codebase uses @micro-zoe/micro-app for micro-frontend implementation
  • Route configurations properly set meta.micro properties in playground/src/router/routes/modules/micro.ts
  • The type definition in packages/@core/base/typings/src/vue-router.d.ts correctly declares the micro meta property
  • Micro-frontend components and initialization are properly handled in both main app (playground/src/useMicro.ts) and child apps (apps/web-antd/src/useChildMicro.ts)
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for route configurations with micro-frontend components
rg -l "meta.*micro.*true" --type ts

# Search for micro-app component usage to cross-reference with routes
ast-grep --pattern 'micro-app name="$_" $$$'

Length of output: 84


Script:

#!/bin/bash
# Let's try a broader search for micro-frontend related configurations and components

# Search for any route meta with 'micro' property
rg "meta.*micro" --type ts -A 2

# Search for micro-frontend related imports and configurations
rg "micro" --type ts -A 2

# Search for micro-app related code with different component syntax
ast-grep --pattern 'import { $_ } from "@micro-$_"'
ast-grep --pattern '<micro-app $$$>'

Length of output: 6705

packages/effects/layouts/package.json (1)

Line range hint 23-43: Verify workspace package versions

The dependency list includes multiple workspace packages. Let's ensure version consistency across the monorepo.

Run the following script to check workspace package versions:

✅ Verification successful

All workspace packages are using the correct workspace protocol

The verification shows that all @vben/* packages across the monorepo are consistently using the workspace:* protocol. No packages were found using incorrect version specifications.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify workspace package versions across the monorepo

# Find all package.json files and check @vben/* dependencies
echo "Checking @vben/* package versions across the monorepo:"
fd -t f "package.json" | xargs rg '"@vben/[^"]+": "workspace:\*"' -l

# Verify that all @vben packages use the workspace protocol
echo -e "\nChecking for @vben packages not using workspace protocol:"
fd -t f "package.json" | xargs rg '"@vben/[^"]+": "[^w][^"]*"'

Length of output: 918

playground/src/router/routes/modules/micro.ts (1)

1-54: Verify security configurations for micro-frontend integration

Since this implements micro-frontend integration with cross-origin communication:

  1. Ensure proper CORS headers are configured on the micro app server
  2. Update Content Security Policy (CSP) to allow loading resources from the micro app domain
  3. Validate the integrity of loaded micro apps
apps/web-antd/package.json (2)

29-29: Verify the version resolution for "catalog:" specifier

The new dependency uses the "catalog:" version specifier, which is consistent with other external dependencies in this project. However, this is a non-standard npm version specifier.

✅ Verification successful

"catalog:" version specifier is valid and consistent with project configuration

The "catalog:" version specifier is a custom version resolution mechanism defined in the project's pnpm-workspace.yaml. The file contains a catalog section that maps package names to their specific versions, including "@micro-zoe/micro-app": "^1.0.0-rc.13". This versioning approach is consistently used across the project's dependencies and is properly configured.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check how "catalog:" versions are resolved in the project

# Check if there's documentation about version resolution
fd -t f "README|CONTRIBUTING" -X grep -l "catalog:"

# Check for custom version resolution configuration
fd -t f "package.json|pnpm-workspace.yaml|.npmrc" -X grep -l "catalog:"

Length of output: 1590


Script:

#!/bin/bash
# Check pnpm-workspace.yaml content for version resolution configuration
cat pnpm-workspace.yaml

# Check root package.json for any version resolution configuration
cat package.json | jq '.resolutions, .pnpm, .overrides'

# Check .npmrc file if it exists
fd -t f ".npmrc" -X cat {}

Length of output: 5286


29-29: Verify security and maintenance status of @micro-zoe/micro-app

Since this is a third-party package being introduced for micro-frontend support, we should verify its security status and maintenance activity.

✅ Verification successful

Let me gather more information about the package's activity and community adoption.


@micro-zoe/micro-app appears to be a stable and actively maintained package

The package shows healthy maintenance and community adoption:

  • No security vulnerabilities reported
  • Active development with latest commit on Nov 15, 2024
  • Latest release (v1.0.0-rc.13) from Oct 16, 2024
  • Significant community adoption with 5.6k GitHub stars
  • Steady weekly downloads (~2.4k)
  • Active issue tracking with maintainer engagement

While still in RC (Release Candidate) status, the package demonstrates consistent maintenance and security practices.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check package security and maintenance status

# Check npm for latest versions and download stats
curl -s https://registry.npmjs.org/@micro-zoe/micro-app | jq '{latest: .["dist-tags"].latest, modified: ._time.modified, maintainers: .maintainers}'

# Check for known vulnerabilities
gh api graphql -f query='
{
  securityVulnerabilities(first: 5, ecosystem: NPM, package: "@micro-zoe/micro-app") {
    nodes {
      advisory {
        summary
        severity
        publishedAt
      }
      vulnerableVersionRange
      firstPatchedVersion {
        identifier
      }
    }
  }
}'

Length of output: 795


Script:

#!/bin/bash
# Check GitHub repository stats and activity
gh api graphql -f query='
{
  repository(owner: "micro-zoe", name: "micro-app") {
    stargazerCount
    issues(states: OPEN) { totalCount }
    pullRequests(states: OPEN) { totalCount }
    releases(first: 1) {
      nodes {
        publishedAt
        tagName
      }
    }
    defaultBranchRef {
      target {
        ... on Commit {
          history(first: 1) {
            nodes {
              committedDate
            }
          }
        }
      }
    }
  }
}'

# Check weekly downloads
curl -s https://api.npmjs.org/downloads/point/last-week/@micro-zoe/micro-app

Length of output: 935

playground/package.json (3)

34-34: Verify lodash-es usage and tree-shaking

The addition of lodash-es and its types suggests new utility functions. Ensure proper ES module imports for tree-shaking.

Also applies to: 52-52

✅ Verification successful

✅ Proper tree-shakeable lodash-es import pattern confirmed

The codebase uses named imports from lodash-es (import { cloneDeep } from 'lodash-es'), which is the correct pattern for enabling tree-shaking. Only one usage was found in playground/src/useMicro.ts, and it follows the recommended ES module import pattern.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check lodash-es import patterns

# Look for proper ES module imports (good)
rg "import\s+{\s*[^}]+}\s+from\s+['\"](lodash-es|@vben)" 

# Look for potential full imports (bad for tree-shaking)
rg "import\s+\*\s+as\s+_\s+from\s+['\"]lodash-es['\"]"

Length of output: 264


Script:

#!/bin/bash
# Search for any lodash-es imports (both named and namespace imports)
rg "from ['\"']lodash-es['\"']" -A 1

# Also check for any lodash imports (in case it's mixed usage)
rg "from ['\"']lodash['\"']" -A 1

# Find all files that might use lodash-es
rg "lodash-es" --type ts --type js --type tsx --type jsx

Length of output: 273


Line range hint 32-52: Verify version resolution strategy

The "catalog:" version specifier is used for all new dependencies. Ensure this aligns with the project's version management strategy.

✅ Verification successful

Version resolution strategy using "catalog:" is consistent across the project

The verification shows that the "catalog:" version specifier is widely used across the project's package.json files, including the root package.json and various packages in the monorepo structure. This is a deliberate and consistent version management strategy used throughout the project, managed by pnpm (version 9.13.2) as the package manager.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check version resolution consistency

# Check if other package.json files use similar version strategy
fd -t f "package.json" -x grep -l "catalog:" {}

Length of output: 1492


Script:

#!/bin/bash
# Let's examine the root package.json to understand the version resolution strategy
cat package.json | grep -A 10 -B 10 "\"packageManager\""

# Also check if there's any documentation about version management
fd -t f "README.md" -x grep -i -A 5 -B 5 "version" {}

Length of output: 2933


32-32: Verify micro-app integration configuration

The addition of @micro-zoe/micro-app aligns with the PR's micro-frontend integration objectives. However, ensure proper configuration in the Vue application.

✅ Verification successful

Micro-app integration is properly configured

The verification shows that @micro-zoe/micro-app is correctly integrated:

  • Proper initialization in playground/src/useMicro.ts with complete configuration including lifecycle hooks, sandbox settings, and router integration
  • Correct implementation of micro-app component in packages/effects/layouts/src/micro/micro-app-view.vue
  • Integration with main application's bootstrap process as seen in main.ts
  • Proper data communication setup between main and child applications
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify micro-app configuration and usage

# Check if micro-app is properly configured in main.ts/bootstrap.ts
rg -l "import\s+.*from\s+['\"]\@micro-zoe\/micro-app['\"]"

# Check for micro-app tags usage
rg "<micro-app\s+" 

Length of output: 222


Script:

#!/bin/bash
# Description: Verify micro-app configuration and usage with corrected regex

# Check if micro-app is properly configured in main.ts/bootstrap.ts
rg -l "@micro-zoe/micro-app"

# Check for micro-app tags usage in template files
rg -l "<micro-app"

# Check main entry files for configuration
fd "main.ts|bootstrap.ts" --exec cat {}

Length of output: 9165


Script:

#!/bin/bash
# Let's check the micro-app configuration files to understand the setup

# Check useMicro.ts content
cat playground/src/useMicro.ts

# Check micro-app-view.vue content
cat packages/effects/layouts/src/micro/micro-app-view.vue

# Check if there are any micro-app configuration files
fd -e ts -e js "micro.*config"

Length of output: 4759

apps/web-antd/src/router/routes/modules/vben.ts (1)

17-17: Verify layout compatibility with micro-frontend integration

The change from BasicLayout to LayoutContent aligns with the micro-frontend integration objectives. However, we should verify the following:

  1. Compatibility with child routes and iframe content
  2. Proper handling of micro-frontend content within the new layout
✅ Verification successful

Layout change is compatible with micro-frontend integration

The change from BasicLayout to LayoutContent is safe and properly integrated:

  • The route /vben-admin uses LayoutContent as the parent layout
  • Child routes under this path correctly use IFrameView component for micro-frontend content
  • Only the dashboard module still uses BasicLayout, which is appropriate as it's a different section
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for other routes that might need similar updates and verify layout usage

# Check for other routes still using BasicLayout
echo "Checking for other routes using BasicLayout..."
rg "component:\s+BasicLayout" "apps/web-antd/src/router"

# Check for other layout-related configurations that might need updates
echo "Checking for related layout configurations..."
rg "LayoutContent" "apps/web-antd/src/layouts" -A 5

Length of output: 693


Script:

#!/bin/bash
# Check the implementation and usage of LayoutContent in @vben/layouts
echo "Checking @vben/layouts package for LayoutContent implementation..."
fd -e ts -e tsx "LayoutContent" packages/layouts

# Check for any child routes under vben-admin
echo "Checking child routes under vben-admin..."
rg "path.*vben-admin.*children" apps/web-antd/src/router -A 10

# Check for iframe-related configurations
echo "Checking iframe configurations..."
rg "IFrameView|iframe" apps/web-antd/src/router

Length of output: 1153

packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue (3)

Line range hint 58-80: LGTM! Well-structured template with proper transition handling.

The template implementation:

  • Uses semantic class names
  • Properly handles visibility transitions
  • Follows accessibility best practices with proper z-index and backdrop blur

Line range hint 81-127: LGTM! Well-implemented LESS styles with clean animation definitions.

The style implementation:

  • Uses proper LESS nesting
  • Has well-organized keyframe animations
  • Maintains clean and maintainable structure

Line range hint 1-127: Verify spinner behavior in micro-frontend context.

Since this PR focuses on micro-frontend integration, let's verify that the spinner behavior aligns with the micro-frontend requirements, particularly during route transitions and app loading.

✅ Verification successful

Spinner implementation aligns with micro-frontend requirements

The spinner component is correctly implemented for micro-frontend integration:

  • It's explicitly disabled for micro-frontend routes (to.meta.micro)
  • The implementation allows independent loading states for micro apps
  • The spinner's behavior respects the micro-frontend architecture by not interfering with micro app loading
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for micro-frontend related configurations and usages

# Check for micro-frontend related route configurations
rg -l "meta.micro" 

# Check for spinner usage in micro-frontend context
rg -l "VbenSpinner.*micro"

# Check for related configurations in micro-app setup
rg -l "VITE_INJECT_APP_LOADING"

Length of output: 444


Script:

#!/bin/bash
# Check spinner implementation in micro-frontend context
rg -A 10 "VbenSpinner" packages/effects/layouts/src/basic/content/content.vue
rg -A 10 "VbenSpinner" packages/effects/layouts/src/basic/content/use-content-spinner.ts

# Check micro app loading configuration
rg -A 5 "VITE_INJECT_APP_LOADING" internal/vite-config/src/utils/env.ts

# Check micro app view implementation
rg -A 10 "meta.micro" packages/effects/layouts/src/micro/micro-app-view.vue

Length of output: 1030


Script:

#!/bin/bash
# Check content spinner implementation and its relation to micro apps
cat packages/effects/layouts/src/basic/content/use-content-spinner.ts

# Check if spinner is used in any micro app loading scenarios
rg -A 5 "loading.*spinner" packages/effects/layouts/src/
rg -A 5 "spinner.*loading" packages/effects/layouts/src/

Length of output: 1453

packages/@core/base/typings/src/vue-router.d.ts (1)

101-109: Verify the usage of the new micro-frontend route configuration.

Let's ensure the new micro property is being used consistently across the codebase.

✅ Verification successful

Let me gather more information about the micro-frontend configuration usage.


The micro property is being used correctly and consistently across the codebase

The verification shows that:

  • The micro property interface matches its implementation in route configurations
  • The MicroAppView component correctly validates and uses all required fields (name, hash, host, baseroute)
  • The micro-frontend routes are properly configured in playground/src/router/routes/modules/micro.ts
  • Integration with @micro-zoe/micro-app is consistent with the type definition
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check the usage of the new micro property in route configurations

# Search for route definitions using the micro property
echo "Checking route definitions with micro property..."
rg -t ts "micro:\s*{" --glob "**/*routes*.ts"

# Search for MicroAppView component usage
echo "Checking MicroAppView component usage..."
rg -t ts "MicroAppView" --glob "**/*.ts"

# Search for @micro-zoe/micro-app related configurations
echo "Checking micro-app configurations..."
rg -t ts "@micro-zoe/micro-app"

Length of output: 1239


Script:

#!/bin/bash
# Check for micro property usage with fixed regex
echo "Checking route definitions with micro property..."
rg -t ts 'micro:\s?\{' -A 5

# Check the micro-app-view component implementation
echo "Checking MicroAppView implementation..."
cat packages/effects/layouts/src/micro/micro-app-view.vue

# Check micro route configuration
echo "Checking micro route configuration..."
cat playground/src/router/routes/modules/micro.ts

Length of output: 3943

internal/vite-config/src/plugins/nitro-mock.ts (2)

39-39: LGTM!

The URL display change from 'localhost' to '127.0.0.1' is a cosmetic update with no functional impact.


88-88: Security consideration: Verify the need for listening on all network interfaces.

The server is now configured to listen on all network interfaces (0.0.0.0) instead of just localhost. While this might be necessary for micro-frontend architecture, it could potentially expose the mock server to unauthorized access.

Consider:

  1. Adding IP filtering or authentication if the mock server contains sensitive data
  2. Restricting to localhost if external access isn't required
  3. Documenting the security implications in the README

Let's check if there are any security measures in place:

packages/effects/layouts/src/basic/content/content.vue (3)

65-66: LGTM! Improved code readability.

The added spacing and explicit component name extraction enhance code clarity.


14-14: Clarify the intention of commented micro-frontend code.

The commented-out micro-frontend related code suggests incomplete implementation. Given that micro-frontend integration is a key objective of this PR, please either:

  1. Implement the micro-frontend integration if it's ready
  2. Remove the commented code if it's not needed
  3. Add a TODO comment explaining the future implementation plan

Let's check if micro-frontend integration is implemented elsewhere:

Also applies to: 56-58


97-103: Verify the impact of template changes.

Two significant changes require verification:

  1. The new div wrapper around the component could affect layout/styling
  2. Using route.name instead of route.fullPath as the key might prevent component re-renders when only route parameters change

Let's check for potential layout issues and route parameter dependencies:

Also applies to: 108-108

✅ Verification successful

Based on the search results, I can now generate the final response:

Template changes appear safe to implement

  1. The div wrapper addition is safe as there are no direct CSS styles targeting the component that would be affected by the extra wrapper. The content component's styling is managed through standard layout classes and v-show directive.

  2. Changing from route.fullPath to route.name as key is also acceptable:

    • The codebase shows minimal usage of route.params, with only one instance found
    • No existing patterns were found that rely on fullPath for component keying
    • Using route.name provides more stable component lifecycle management, as it won't trigger unnecessary re-renders for query parameter changes
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for CSS targeting the component directly
rg -g '*.{css,scss,less}' "\.ant-.*component|\.vben-.*component"

# Check for routes with parameters that might need re-rendering
ast-grep --pattern 'route: { 
  $$$
  params: $_,
  $$$
}'

Length of output: 127


Script:

#!/bin/bash
# Let's try different approaches to verify both concerns:

# 1. Check for CSS/styling related to the content component
rg -g '*.{css,scss,less,vue}' 'content.*\{' -A 5
rg -g '*.vue' '<style.*>' -A 10 packages/effects/layouts/src/basic/content/

# 2. Check route definitions and usages
rg -g '*.{ts,js,vue}' 'route\.params' -A 2
rg -g '*.{ts,js,vue}' 'fullPath.*key' -B 2 -A 2

# 3. Look for similar component rendering patterns
ast-grep --pattern 'component :is="$_" :key="$_"'

Length of output: 27108

apps/web-antd/src/useChildMicro.ts (1)

58-60: Review token handling security.

Direct token handling in the micro-frontend could pose security risks. Consider:

  1. Implementing token validation before storage
  2. Using secure storage mechanisms
  3. Adding token expiration handling
✅ Verification successful

Let me check the token validation and storage implementation more thoroughly.


Token handling implementation is secure

The current token handling implementation already incorporates robust security measures:

  • Tokens are stored securely with proper state management using Pinia store
  • Token refresh mechanism is implemented with queue handling for concurrent requests
  • HTTP-only cookies are used for refresh tokens
  • Token expiration is handled with automatic refresh flows
  • Bearer token format is properly enforced
  • Clear separation between access and refresh tokens
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for other token handling implementations
rg -A 5 "setAccessToken|getAccessToken" --type ts

Length of output: 6338


Script:

#!/bin/bash
# Check token validation and storage implementation
ast-grep --pattern 'function formatToken($_) { $$$ }'

# Check access store implementation
cat packages/stores/src/modules/access.ts

# Check token refresh and expiration handling
rg -A 5 "refreshToken|tokenExpir" --type ts

Length of output: 14687

packages/@core/base/design/src/css/global.css (1)

Line range hint 31-36: LGTM! Verify layout behavior in micro-frontend context.

The addition of .app class alongside #app supports the micro-frontend architecture while maintaining backward compatibility. The size-full utility ensures consistent full-size layout.

✅ Verification successful

LGTM! The .app class addition is properly implemented and works with micro-frontend architecture

The verification confirms:

  • The .app class is uniquely defined in global.css without conflicts
  • Micro-frontend integration uses micro-app component with proper layout containment
  • The micro-frontend view has its own scoped styles that don't interfere with the global .app class
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the usage of .app class in micro-frontend context
# Look for potential conflicting styles or layout issues

# Search for any custom styles that might override .app class
rg -g '*.{css,scss,less}' 'class.*app.*{' 

# Look for micro-app container elements that might need the .app class
rg -g '*.{vue,tsx,jsx}' '<micro-app'

Length of output: 241


Script:

#!/bin/bash
# Search for .app class styles with proper regex escaping
rg -g '*.{css,scss,less}' '\.app\s*{|\.app[,\s]'

# Search for micro-app container and its usage context
rg -g '*.{vue,tsx,jsx}' -B 2 -A 2 '<micro-app'

# Look for any app-related class assignments in components
rg -g '*.{vue,tsx,jsx}' 'class=["'\''].*app.*["'\'']'

Length of output: 922


Script:

#!/bin/bash
# Search for .app class with fixed regex
rg -g '*.{css,scss,less}' '\.app[\s{,]'

# Check the micro-app-view component's full content
cat packages/effects/layouts/src/micro/micro-app-view.vue

# Look for any app-related styles in the micro-frontend layout
rg -g '*.{css,scss,less}' 'micro-view'

Length of output: 1561

pnpm-workspace.yaml (2)

48-48: LGTM: Lodash ESM integration looks good.

The addition of lodash-es and its corresponding types package is a good choice:

  • Uses ESM format which enables better tree-shaking
  • Type definitions version aligns well with the runtime version
  • Both are stable releases

Also applies to: 119-119


33-33: Consider the stability implications of using a release candidate version.

The @micro-zoe/micro-app@^1.0.0-rc.13 is a release candidate version. While it aligns with the PR's micro-frontend integration objectives, using an RC version in production could introduce instability.

Let's check for any stable releases and known issues:

✅ Verification successful

Using RC version 1.0.0-rc.13 is acceptable for production

Based on the NPM registry data:

  • The package has been actively maintained with regular releases
  • RC.13 is the latest version and was released recently (October 16, 2024)
  • The RC phase has been stable since September 2023 (RC.0) with consistent updates
  • The package has been in development since 2021 with a mature codebase

While it's a release candidate, the version 1.0.0-rc.13 represents over a year of RC phase stability and active maintenance, making it suitable for production use.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check NPM registry for latest versions and release dates
curl -s https://registry.npmjs.org/@micro-zoe/micro-app | jq -r '.["dist-tags"], ."time"'

# Check GitHub issues for critical bugs in RC versions
gh api graphql -f query='
{
  repository(owner: "micro-zoe", name: "micro-app") {
    issues(last: 10, states: OPEN, labels: ["bug"]) {
      nodes {
        title
        body
        createdAt
      }
    }
  }
}'

Length of output: 10792

internal/vite-config/src/plugins/index.ts (1)

61-65: LGTM! Configuration aligns with micro-frontend integration.

The Vue compiler configuration correctly enables micro-app custom elements, which is essential for the micro-frontend integration mentioned in the PR objectives.

Let's verify if there are any existing custom elements that might be affected:

Consider adding a comment above the configuration to document the purpose:

 template: {
   compilerOptions: {
+    // Allow micro-app custom elements for micro-frontend integration
     isCustomElement: (tag) => tag.startsWith('micro-app'),
   },
 },
✅ Verification successful

The previous search might have been too specific. This new approach:

  1. Looks for any custom elements (tags with hyphens)
  2. Searches for custom element configurations more broadly
  3. Checks for micro-app related code
  4. Examines Vue configuration files

This will help us better understand the custom element landscape in the codebase.


This will help us understand:

  1. How micro-apps are currently implemented
  2. Whether the new configuration aligns with existing usage
  3. If there are any conflicting compiler configurations

Configuration is correctly implemented for micro-frontend integration

The verification confirms that:

  • The micro-app custom element is actively used in packages/effects/layouts/src/micro/micro-app-view.vue
  • The implementation uses @micro-zoe/micro-app package as intended
  • No conflicting Vue compiler configurations were found
  • The custom element configuration aligns with the actual usage in the codebase
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Search for existing custom elements in Vue templates
# This helps ensure we're not breaking any existing custom element handling

# Search for custom elements in .vue files
rg -g '*.vue' '<[A-Z][a-zA-Z0-9]*-[a-zA-Z0-9-]*' 

# Search for isCustomElement configurations that might conflict
ast-grep --pattern 'isCustomElement: $_'

Length of output: 93


Script:

#!/bin/bash
# Let's try a more comprehensive search for custom elements and configurations

# Search for any HTML-like tags with hyphens in Vue files
rg -g '*.vue' '<\w+[-]\w+' -l

# Search for custom element related configurations in all files
rg 'isCustomElement|customElement' -l

# Search for micro-app related imports or usage
rg 'micro-app' -l

# Look for Vue configuration files
fd -e js -e ts 'vue.config' -x cat {}

Length of output: 551


Script:

#!/bin/bash
# Let's examine the micro-app implementation details

# Check the content of micro-app-view.vue to understand custom element usage
cat packages/effects/layouts/src/micro/micro-app-view.vue

# Look at the micro-app related configuration and usage
cat packages/effects/layouts/src/micro/index.ts
cat playground/src/useMicro.ts
cat apps/web-antd/src/useChildMicro.ts

# Check if there are any other Vue compiler configurations that might conflict
ast-grep --pattern 'compilerOptions: {
  $$$
}'

Length of output: 7597

apps/web-antd/src/bootstrap.ts (1)

22-28: Function handleMicroData is correctly implemented

The handleMicroData function appropriately checks for the micro-frontend environment and adds a data listener using window.microApp.addDataListener. The implementation aligns with micro-frontend data handling best practices.

playground/vite.config.mts Show resolved Hide resolved
playground/src/bootstrap.ts Show resolved Hide resolved
packages/effects/layouts/package.json Show resolved Hide resolved
apps/web-antd/src/bootstrap.ts Show resolved Hide resolved
Comment on lines +65 to +75
function unmount() {
app?.unmount();
// history?.destroy();
// 卸载所有数据监听函数,开启沙箱情况下不再需要
window.microApp.clearDataListener();

app = null;
// router = null;
// history = null;
console.warn('微应用卸载了,微应用的 unmount() fired');
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Add environment check before clearing data listeners

To prevent potential runtime errors when window.microApp is undefined outside of the micro-frontend environment, consider adding a check for window.__MICRO_APP_ENVIRONMENT__ before calling window.microApp.clearDataListener().

Apply the following change to ensure safe execution:

function unmount() {
  app?.unmount();
  // history?.destroy();
  // 卸载所有数据监听函数,开启沙箱情况下不再需要
+  if (window.__MICRO_APP_ENVIRONMENT__) {
     window.microApp.clearDataListener();
+  }
  app = null;
  // router = null;
  // history = null;
  console.warn('微应用卸载了,微应用的 unmount() fired');
}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
function unmount() {
app?.unmount();
// history?.destroy();
// 卸载所有数据监听函数,开启沙箱情况下不再需要
window.microApp.clearDataListener();
app = null;
// router = null;
// history = null;
console.warn('微应用卸载了,微应用的 unmount() fired');
}
function unmount() {
app?.unmount();
// history?.destroy();
// 卸载所有数据监听函数,开启沙箱情况下不再需要
if (window.__MICRO_APP_ENVIRONMENT__) {
window.microApp.clearDataListener();
}
app = null;
// router = null;
// history = null;
console.warn('微应用卸载了,微应用的 unmount() fired');
}

apps/web-antd/src/bootstrap.ts Show resolved Hide resolved
playground/src/useMicro.ts Show resolved Hide resolved
playground/src/useMicro.ts Show resolved Hide resolved
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant