@modern-js/main-doc 2.69.4 → 3.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/en/{_meta.json → _nav.json} +5 -1
- package/docs/en/apis/app/commands.mdx +2 -3
- package/docs/en/apis/app/hooks/src/entry.mdx +1 -5
- package/docs/en/apis/app/hooks/src/entry.server.mdx +4 -5
- package/docs/en/apis/app/hooks/src/routes.mdx +2 -2
- package/docs/en/apis/app/runtime/_meta.json +0 -18
- package/docs/en/apis/app/runtime/bff/use-hono-context.mdx +2 -2
- package/docs/en/apis/app/runtime/router/router.mdx +1 -1
- package/docs/en/apis/app/runtime/utility/css-in-js.mdx +3 -2
- package/docs/en/community/blog/v2-release-note.mdx +0 -2
- package/docs/en/community/contributing-guide.mdx +10 -12
- package/docs/en/components/bff-upload.mdx +16 -12
- package/docs/en/components/build-output.mdx +45 -0
- package/docs/en/components/debug-app.mdx +1 -1
- package/docs/en/components/enable-bff-caution.mdx +2 -2
- package/docs/en/components/enable-bff.mdx +38 -8
- package/docs/en/components/enable-ssg.mdx +48 -0
- package/docs/en/components/entry-scan-logic.mdx +7 -0
- package/docs/en/components/init-app.mdx +40 -17
- package/docs/en/components/international/install-command.mdx +9 -0
- package/docs/en/components/international/introduce.mdx +2 -0
- package/docs/en/components/module-federation.mdx +4 -4
- package/docs/en/components/new-entry-tooltip.mdx +0 -0
- package/docs/en/components/nodeVersion.mdx +2 -6
- package/docs/en/components/prerequisites.mdx +1 -1
- package/docs/en/components/ua-polyfill.mdx +16 -12
- package/docs/en/components/upgrade-browserslist.mdx +0 -0
- package/docs/en/configure/_meta.json +7 -8
- package/docs/en/configure/app/bff/cross-project.mdx +24 -0
- package/docs/en/configure/app/dev/lazy-compilation.mdx +45 -0
- package/docs/en/configure/app/dev/server.mdx +103 -0
- package/docs/en/configure/app/dev/setup-middlewares.mdx +4 -22
- package/docs/en/configure/app/html/app-icon.mdx +1 -23
- package/docs/en/configure/app/output/inline-scripts.mdx +1 -1
- package/docs/en/configure/app/output/override-browserslist.mdx +6 -4
- package/docs/en/configure/app/output/source-map.mdx +6 -3
- package/docs/en/configure/app/output/ssg.mdx +12 -43
- package/docs/en/configure/app/output/ssgByEntries.mdx +93 -0
- package/docs/en/configure/app/performance/build-cache.mdx +0 -4
- package/docs/en/configure/app/resolve/alias-strategy.mdx +14 -0
- package/docs/en/configure/app/resolve/alias.mdx +13 -0
- package/docs/en/configure/app/resolve/condition-names.mdx +18 -0
- package/docs/en/configure/app/resolve/dedupe.mdx +13 -0
- package/docs/en/configure/app/resolve/extensions.mdx +18 -0
- package/docs/en/configure/app/runtime/0-intro.mdx +2 -51
- package/docs/en/configure/app/security/check-syntax.mdx +1 -1
- package/docs/en/configure/app/server/port.mdx +1 -21
- package/docs/en/configure/app/server/rsc.mdx +30 -0
- package/docs/en/configure/app/server/ssr.mdx +20 -9
- package/docs/en/configure/app/source/decorators.mdx +4 -2
- package/docs/en/configure/app/source/entries.mdx +0 -2
- package/docs/en/configure/app/source/main-entry-name.mdx +4 -4
- package/docs/en/configure/app/source/transform-import.mdx +1 -59
- package/docs/en/configure/app/tools/bundler-chain.mdx +5 -5
- package/docs/en/configure/app/tools/css-extract.mdx +1 -1
- package/docs/en/configure/app/tools/dev-server.mdx +14 -248
- package/docs/en/configure/app/tools/html-plugin.mdx +3 -3
- package/docs/en/configure/app/tools/lightningcss-loader.mdx +0 -1
- package/docs/en/configure/app/tools/swc.mdx +1 -43
- package/docs/en/configure/app/usage.mdx +7 -17
- package/docs/en/guides/_meta.json +1 -2
- package/docs/en/guides/advanced-features/_meta.json +6 -0
- package/docs/en/guides/advanced-features/bff/cross-project.mdx +1 -7
- package/docs/en/guides/advanced-features/bff/extend-server.mdx +18 -3
- package/docs/en/guides/advanced-features/bff/frameworks.mdx +1 -1
- package/docs/en/guides/advanced-features/bff/function.mdx +2 -6
- package/docs/en/guides/advanced-features/bff/sdk.mdx +3 -3
- package/docs/en/guides/advanced-features/build-performance.mdx +23 -26
- package/docs/en/guides/advanced-features/compatibility.mdx +53 -9
- package/docs/en/guides/advanced-features/international/_meta.json +11 -0
- package/docs/en/guides/advanced-features/international/advanced.mdx +193 -0
- package/docs/en/guides/advanced-features/international/api.mdx +400 -0
- package/docs/en/guides/advanced-features/international/basic.mdx +417 -0
- package/docs/en/guides/advanced-features/international/best-practices.mdx +135 -0
- package/docs/en/guides/advanced-features/international/configuration.mdx +437 -0
- package/docs/en/guides/advanced-features/international/locale-detection.mdx +276 -0
- package/docs/en/guides/advanced-features/international/quick-start.mdx +154 -0
- package/docs/en/guides/advanced-features/international/resource-loading.mdx +417 -0
- package/docs/en/guides/advanced-features/international/routing.mdx +212 -0
- package/docs/en/guides/advanced-features/international.mdx +37 -0
- package/docs/en/guides/advanced-features/low-level.mdx +21 -16
- package/docs/en/guides/advanced-features/page-performance/code-split.mdx +4 -4
- package/docs/en/guides/advanced-features/page-performance/inline-assets.mdx +4 -4
- package/docs/en/guides/advanced-features/page-performance/optimize-bundle.mdx +7 -21
- package/docs/en/guides/advanced-features/page-performance/react-compiler.mdx +1 -8
- package/docs/en/guides/advanced-features/rspack-start.mdx +2 -22
- package/docs/en/guides/advanced-features/server-monitor/logger.mdx +0 -4
- package/docs/en/guides/advanced-features/server-monitor/monitors.mdx +62 -34
- package/docs/en/guides/advanced-features/web-server.mdx +82 -299
- package/docs/en/guides/basic-features/_meta.json +6 -1
- package/docs/en/guides/basic-features/css/css-in-js.mdx +46 -11
- package/docs/en/guides/basic-features/css/css-modules.mdx +5 -17
- package/docs/en/guides/basic-features/css/css.mdx +3 -3
- package/docs/en/guides/basic-features/css/tailwindcss.mdx +5 -89
- package/docs/en/guides/basic-features/data/data-cache.mdx +5 -1
- package/docs/en/guides/basic-features/data/data-fetch.mdx +4 -4
- package/docs/en/guides/basic-features/data/data-write.mdx +2 -2
- package/docs/en/guides/basic-features/debug/mock.mdx +4 -1
- package/docs/en/guides/basic-features/debug/proxy.mdx +0 -8
- package/docs/en/guides/basic-features/debug/rsdoctor.mdx +5 -5
- package/docs/en/guides/basic-features/deploy.mdx +25 -18
- package/docs/en/guides/basic-features/env-vars.mdx +1 -1
- package/docs/en/guides/basic-features/html.mdx +1 -1
- package/docs/en/guides/basic-features/output-files.mdx +3 -3
- package/docs/en/guides/basic-features/render/_meta.json +1 -1
- package/docs/en/guides/basic-features/render/before-render.mdx +16 -23
- package/docs/en/guides/basic-features/render/overview.mdx +51 -0
- package/docs/en/guides/basic-features/render/rsc.mdx +394 -0
- package/docs/en/guides/basic-features/render/ssg.mdx +26 -62
- package/docs/en/guides/basic-features/render/ssr-cache.mdx +6 -6
- package/docs/en/guides/basic-features/render/ssr.mdx +31 -31
- package/docs/en/guides/basic-features/render/streaming-ssr.mdx +29 -9
- package/docs/en/guides/basic-features/routes/_meta.json +1 -0
- package/docs/en/guides/basic-features/routes/config-routes.mdx +427 -0
- package/docs/en/guides/basic-features/{routes.mdx → routes/routes.mdx} +7 -110
- package/docs/en/guides/basic-features/static-assets/json-files.mdx +21 -3
- package/docs/en/guides/basic-features/static-assets.mdx +2 -2
- package/docs/en/guides/concept/builder.mdx +24 -9
- package/docs/en/guides/concept/entries.mdx +139 -147
- package/docs/en/guides/get-started/glossary.mdx +0 -18
- package/docs/en/guides/get-started/introduction.mdx +1 -4
- package/docs/en/guides/get-started/quick-start.mdx +8 -73
- package/docs/en/guides/get-started/tech-stack.mdx +7 -25
- package/docs/en/guides/get-started/upgrade.mdx +30 -23
- package/docs/en/guides/topic-detail/_meta.json +0 -12
- package/docs/en/guides/topic-detail/module-federation/_meta.json +1 -1
- package/docs/en/guides/topic-detail/module-federation/application.mdx +16 -15
- package/docs/en/guides/topic-detail/module-federation/i18n.mdx +670 -0
- package/docs/en/guides/topic-detail/module-federation/introduce.mdx +5 -4
- package/docs/en/guides/topic-detail/module-federation/ssr.mdx +50 -2
- package/docs/en/guides/topic-detail/module-federation/usage.mdx +10 -30
- package/docs/en/guides/troubleshooting/builder.mdx +3 -82
- package/docs/en/guides/troubleshooting/cli.mdx +6 -30
- package/docs/en/guides/troubleshooting/dependencies.mdx +22 -22
- package/docs/en/plugin/cli-plugins/api.mdx +4 -5
- package/docs/en/plugin/cli-plugins/migration.mdx +33 -48
- package/docs/en/plugin/introduction.mdx +39 -27
- package/docs/en/plugin/official/_meta.json +0 -5
- package/docs/en/plugin/official/cli-plugins/_meta.json +1 -1
- package/docs/en/plugin/official/cli-plugins/plugin-styled-components.mdx +5 -0
- package/docs/en/plugin/official/cli-plugins.mdx +0 -2
- package/docs/en/plugin/plugin-system.mdx +68 -61
- package/docs/en/plugin/runtime-plugins/api.mdx +62 -59
- package/docs/en/plugin/runtime-plugins/migration.mdx +29 -20
- package/docs/en/tutorials/_meta.json +0 -10
- package/docs/en/tutorials/examples/csr-auth.mdx +1 -1
- package/docs/en/tutorials/foundations/introduction.mdx +9 -25
- package/docs/zh/{_meta.json → _nav.json} +10 -6
- package/docs/zh/apis/app/commands.mdx +2 -3
- package/docs/zh/apis/app/hooks/src/entry.mdx +1 -5
- package/docs/zh/apis/app/hooks/src/entry.server.mdx +4 -5
- package/docs/zh/apis/app/hooks/src/routes.mdx +2 -2
- package/docs/zh/apis/app/runtime/_meta.json +0 -18
- package/docs/zh/apis/app/runtime/bff/use-hono-context.mdx +2 -2
- package/docs/zh/apis/app/runtime/utility/css-in-js.mdx +3 -2
- package/docs/zh/community/blog/v2-release-note.mdx +0 -2
- package/docs/zh/community/contributing-guide.mdx +10 -12
- package/docs/zh/components/auto-upgrade.mdx +0 -0
- package/docs/zh/components/bff-upload.mdx +8 -5
- package/docs/zh/components/build-output.mdx +45 -0
- package/docs/zh/components/debug-app.mdx +1 -1
- package/docs/zh/components/enable-bff-caution.mdx +1 -1
- package/docs/zh/components/enable-bff.mdx +37 -8
- package/docs/zh/components/enable-ssg.mdx +47 -0
- package/docs/zh/components/entry-scan-logic.mdx +7 -0
- package/docs/zh/components/init-app.mdx +40 -18
- package/docs/zh/components/international/install-command.mdx +8 -0
- package/docs/zh/components/international/introduce.mdx +2 -0
- package/docs/zh/components/international/platform-support.mdx +0 -0
- package/docs/zh/components/module-federation.mdx +4 -4
- package/docs/zh/components/new-entry-tooltip.mdx +0 -0
- package/docs/zh/components/nodeVersion.mdx +3 -7
- package/docs/zh/components/prerequisites.mdx +1 -1
- package/docs/zh/components/self-route-example.mdx +3 -3
- package/docs/zh/components/ua-polyfill.mdx +11 -6
- package/docs/zh/components/upgrade-browserslist.mdx +0 -0
- package/docs/zh/configure/_meta.json +7 -8
- package/docs/zh/configure/app/bff/cross-project.mdx +24 -0
- package/docs/zh/configure/app/dev/lazy-compilation.mdx +44 -0
- package/docs/zh/configure/app/dev/server.mdx +104 -0
- package/docs/zh/configure/app/dev/setup-middlewares.mdx +4 -23
- package/docs/zh/configure/app/html/app-icon.mdx +1 -23
- package/docs/zh/configure/app/output/inline-scripts.mdx +1 -1
- package/docs/zh/configure/app/output/override-browserslist.mdx +3 -3
- package/docs/zh/configure/app/output/source-map.mdx +10 -3
- package/docs/zh/configure/app/output/ssg.mdx +13 -45
- package/docs/zh/configure/app/output/ssgByEntries.mdx +94 -0
- package/docs/zh/configure/app/performance/build-cache.mdx +0 -4
- package/docs/zh/configure/app/resolve/alias-strategy.mdx +14 -0
- package/docs/zh/configure/app/resolve/alias.mdx +13 -0
- package/docs/zh/configure/app/resolve/condition-names.mdx +18 -0
- package/docs/zh/configure/app/resolve/dedupe.mdx +14 -0
- package/docs/zh/configure/app/resolve/extensions.mdx +18 -0
- package/docs/zh/configure/app/runtime/0-intro.mdx +2 -53
- package/docs/zh/configure/app/security/check-syntax.mdx +1 -1
- package/docs/zh/configure/app/server/port.mdx +2 -21
- package/docs/zh/configure/app/server/rsc.mdx +30 -0
- package/docs/zh/configure/app/server/ssr.mdx +21 -11
- package/docs/zh/configure/app/source/decorators.mdx +4 -4
- package/docs/zh/configure/app/source/entries.mdx +0 -2
- package/docs/zh/configure/app/source/main-entry-name.mdx +4 -4
- package/docs/zh/configure/app/source/transform-import.mdx +1 -59
- package/docs/zh/configure/app/tools/bundler-chain.mdx +6 -6
- package/docs/zh/configure/app/tools/css-extract.mdx +1 -1
- package/docs/zh/configure/app/tools/dev-server.mdx +14 -248
- package/docs/zh/configure/app/tools/html-plugin.mdx +3 -2
- package/docs/zh/configure/app/tools/lightningcss-loader.mdx +0 -1
- package/docs/zh/configure/app/tools/swc.mdx +1 -43
- package/docs/zh/configure/app/usage.mdx +8 -18
- package/docs/zh/guides/_meta.json +5 -1
- package/docs/zh/guides/advanced-features/_meta.json +6 -1
- package/docs/zh/guides/advanced-features/bff/cross-project.mdx +8 -16
- package/docs/zh/guides/advanced-features/bff/extend-server.mdx +25 -8
- package/docs/zh/guides/advanced-features/bff/frameworks.mdx +1 -1
- package/docs/zh/guides/advanced-features/bff/function.mdx +7 -12
- package/docs/zh/guides/advanced-features/bff/sdk.mdx +4 -4
- package/docs/zh/guides/advanced-features/build-performance.mdx +23 -30
- package/docs/zh/guides/advanced-features/compatibility.mdx +44 -0
- package/docs/zh/guides/advanced-features/international/_meta.json +11 -0
- package/docs/zh/guides/advanced-features/international/advanced.mdx +193 -0
- package/docs/zh/guides/advanced-features/international/api.mdx +400 -0
- package/docs/zh/guides/advanced-features/international/basic.mdx +416 -0
- package/docs/zh/guides/advanced-features/international/best-practices.mdx +135 -0
- package/docs/zh/guides/advanced-features/international/configuration.mdx +441 -0
- package/docs/zh/guides/advanced-features/international/locale-detection.mdx +304 -0
- package/docs/zh/guides/advanced-features/international/quick-start.mdx +149 -0
- package/docs/zh/guides/advanced-features/international/resource-loading.mdx +417 -0
- package/docs/zh/guides/advanced-features/international/routing.mdx +212 -0
- package/docs/zh/guides/advanced-features/international.mdx +36 -0
- package/docs/zh/guides/advanced-features/low-level.mdx +21 -16
- package/docs/zh/guides/advanced-features/page-performance/code-split.mdx +3 -3
- package/docs/zh/guides/advanced-features/page-performance/inline-assets.mdx +4 -4
- package/docs/zh/guides/advanced-features/page-performance/optimize-bundle.mdx +7 -21
- package/docs/zh/guides/advanced-features/page-performance/react-compiler.mdx +1 -8
- package/docs/zh/guides/advanced-features/server-monitor/logger.mdx +0 -4
- package/docs/zh/guides/advanced-features/server-monitor/monitors.mdx +63 -35
- package/docs/zh/guides/advanced-features/web-server.mdx +79 -300
- package/docs/zh/guides/basic-features/_meta.json +6 -1
- package/docs/zh/guides/basic-features/css/css-in-js.mdx +40 -5
- package/docs/zh/guides/basic-features/css/css-modules.mdx +6 -17
- package/docs/zh/guides/basic-features/css/css.mdx +2 -2
- package/docs/zh/guides/basic-features/css/tailwindcss.mdx +6 -90
- package/docs/zh/guides/basic-features/data/data-cache.mdx +8 -5
- package/docs/zh/guides/basic-features/data/data-fetch.mdx +6 -5
- package/docs/zh/guides/basic-features/data/data-write.mdx +4 -4
- package/docs/zh/guides/basic-features/debug/mock.mdx +4 -1
- package/docs/zh/guides/basic-features/debug/proxy.mdx +0 -8
- package/docs/zh/guides/basic-features/debug/rsdoctor.mdx +6 -6
- package/docs/zh/guides/basic-features/deploy.mdx +24 -20
- package/docs/zh/guides/basic-features/env-vars.mdx +1 -1
- package/docs/zh/guides/basic-features/html.mdx +2 -2
- package/docs/zh/guides/basic-features/output-files.mdx +3 -3
- package/docs/zh/guides/basic-features/render/_meta.json +1 -1
- package/docs/zh/guides/basic-features/render/before-render.mdx +17 -24
- package/docs/zh/guides/basic-features/render/overview.mdx +52 -0
- package/docs/zh/guides/basic-features/render/rsc.mdx +413 -0
- package/docs/zh/guides/basic-features/render/ssg.mdx +27 -69
- package/docs/zh/guides/basic-features/render/ssr-cache.mdx +5 -5
- package/docs/zh/guides/basic-features/render/ssr.mdx +34 -31
- package/docs/zh/guides/basic-features/render/streaming-ssr.mdx +34 -14
- package/docs/zh/guides/basic-features/routes/_meta.json +1 -0
- package/docs/zh/guides/basic-features/routes/config-routes.mdx +426 -0
- package/docs/zh/guides/basic-features/{routes.mdx → routes/routes.mdx} +8 -114
- package/docs/zh/guides/basic-features/static-assets/json-files.mdx +21 -3
- package/docs/zh/guides/basic-features/static-assets.mdx +2 -2
- package/docs/zh/guides/basic-features/testing/cypress.mdx +5 -5
- package/docs/zh/guides/basic-features/testing/jest.mdx +12 -12
- package/docs/zh/guides/concept/builder.mdx +24 -9
- package/docs/zh/guides/concept/entries.mdx +95 -92
- package/docs/zh/guides/get-started/glossary.mdx +0 -18
- package/docs/zh/guides/get-started/introduction.mdx +1 -5
- package/docs/zh/guides/get-started/quick-start.mdx +5 -72
- package/docs/zh/guides/get-started/tech-stack.mdx +8 -26
- package/docs/zh/guides/get-started/upgrade.mdx +30 -23
- package/docs/zh/guides/topic-detail/_meta.json +0 -12
- package/docs/zh/guides/topic-detail/module-federation/_meta.json +1 -1
- package/docs/zh/guides/topic-detail/module-federation/application.mdx +18 -16
- package/docs/zh/guides/topic-detail/module-federation/i18n.mdx +623 -0
- package/docs/zh/guides/topic-detail/module-federation/introduce.mdx +4 -4
- package/docs/zh/guides/topic-detail/module-federation/ssr.mdx +51 -5
- package/docs/zh/guides/topic-detail/module-federation/usage.mdx +11 -32
- package/docs/zh/guides/troubleshooting/builder.mdx +3 -84
- package/docs/zh/guides/troubleshooting/cli.mdx +6 -30
- package/docs/zh/guides/troubleshooting/dependencies.mdx +23 -23
- package/docs/zh/guides/upgrade/_meta.json +1 -0
- package/docs/zh/guides/upgrade/config.mdx +809 -0
- package/docs/zh/guides/upgrade/entry.mdx +463 -0
- package/docs/zh/guides/upgrade/other.md +90 -0
- package/docs/zh/guides/upgrade/overview.mdx +36 -0
- package/docs/zh/guides/upgrade/tailwindcss.mdx +130 -0
- package/docs/zh/guides/upgrade/web-server.md +93 -0
- package/docs/zh/plugin/cli-plugins/api.mdx +4 -5
- package/docs/zh/plugin/cli-plugins/migration.mdx +30 -45
- package/docs/zh/plugin/introduction.mdx +36 -24
- package/docs/zh/plugin/official/_meta.json +0 -5
- package/docs/zh/plugin/official/cli-plugins/_meta.json +1 -1
- package/docs/zh/plugin/official/cli-plugins/plugin-styled-components.mdx +5 -0
- package/docs/zh/plugin/official/cli-plugins.mdx +0 -2
- package/docs/zh/plugin/plugin-system.mdx +45 -42
- package/docs/zh/plugin/runtime-plugins/api.mdx +58 -56
- package/docs/zh/plugin/runtime-plugins/migration.mdx +26 -17
- package/docs/zh/tutorials/_meta.json +0 -10
- package/docs/zh/tutorials/examples/csr-auth.mdx +1 -1
- package/docs/zh/tutorials/foundations/introduction.mdx +8 -25
- package/i18n.json +0 -16
- package/package.json +12 -12
- package/rspress.config.ts +5 -8
- package/src/components/ContentCard/index.module.scss +11 -7
- package/src/components/ContentCard/index.tsx +1 -1
- package/src/components/FeatureLayout/index.module.css +1 -1
- package/src/components/Footer/index.tsx +2 -14
- package/src/components/Footer/styles.module.scss +5 -5
- package/src/components/ListCard/index.tsx +1 -1
- package/src/components/RandomMemberList/index.tsx +1 -1
- package/src/components/RsbuildLink/index.tsx +1 -1
- package/src/components/Sandpack/index.tsx +1 -1
- package/src/custom.scss +15 -0
- package/src/i18n/enUS.ts +2 -4
- package/src/i18n/index.ts +1 -1
- package/src/i18n/zhCN.ts +2 -4
- package/src/index.ts +2 -1
- package/src/pages/index.module.scss +59 -41
- package/src/pages/index.tsx +9 -24
- package/docs/en/apis/app/hooks/server/index_.mdx +0 -10
- package/docs/en/apis/app/hooks/src/index_.mdx +0 -38
- package/docs/en/apis/app/hooks/src/stories.mdx +0 -16
- package/docs/en/apis/app/runtime/app/define-config.mdx +0 -67
- package/docs/en/apis/app/runtime/core/bootstrap.mdx +0 -74
- package/docs/en/apis/app/runtime/core/create-app.mdx +0 -49
- package/docs/en/apis/app/runtime/core/use-loader.mdx +0 -89
- package/docs/en/apis/app/runtime/core/use-module-apps.mdx +0 -140
- package/docs/en/apis/app/runtime/core/use-runtime-context.mdx +0 -116
- package/docs/en/apis/app/runtime/model/Provider.mdx +0 -36
- package/docs/en/apis/app/runtime/model/auto-actions.mdx +0 -122
- package/docs/en/apis/app/runtime/model/connect.mdx +0 -146
- package/docs/en/apis/app/runtime/model/create-app.mdx +0 -75
- package/docs/en/apis/app/runtime/model/create-store.mdx +0 -61
- package/docs/en/apis/app/runtime/model/handle-effect.mdx +0 -107
- package/docs/en/apis/app/runtime/model/model_.mdx +0 -198
- package/docs/en/apis/app/runtime/model/use-local-model.mdx +0 -29
- package/docs/en/apis/app/runtime/model/use-model.mdx +0 -89
- package/docs/en/apis/app/runtime/model/use-static-model.mdx +0 -51
- package/docs/en/apis/app/runtime/model/use-store.mdx +0 -26
- package/docs/en/apis/app/runtime/ssr/pre-render.mdx +0 -96
- package/docs/en/apis/app/runtime/web-server/hook.mdx +0 -134
- package/docs/en/apis/app/runtime/web-server/middleware.mdx +0 -113
- package/docs/en/apis/app/runtime/web-server/unstable_middleware.mdx +0 -167
- package/docs/en/components/bff-proxy-path-rewrite.mdx +0 -16
- package/docs/en/components/bff-proxy-principle.mdx +0 -1
- package/docs/en/components/builder.mdx +0 -3
- package/docs/en/components/create-bff-api-app.mdx +0 -25
- package/docs/en/components/custom-router-micro-frontend.mdx +0 -40
- package/docs/en/components/enable-micro-frontend.mdx +0 -30
- package/docs/en/components/enableSwc.mdx +0 -17
- package/docs/en/components/global-proxy-config.mdx +0 -85
- package/docs/en/components/global-proxy.mdx +0 -29
- package/docs/en/components/package-manager.mdx +0 -11
- package/docs/en/components/reduck-notify.mdx +0 -27
- package/docs/en/components/reduck-tip.mdx +0 -8
- package/docs/en/configure/app/auto-load-plugin.mdx +0 -66
- package/docs/en/configure/app/deploy/microFrontend.mdx +0 -53
- package/docs/en/configure/app/dev/port.mdx +0 -25
- package/docs/en/configure/app/dev/proxy.mdx +0 -9
- package/docs/en/configure/app/experiments/lazy-compilation.mdx +0 -106
- package/docs/en/configure/app/html/disable-html-folder.mdx +0 -46
- package/docs/en/configure/app/html/favicon-by-entries.mdx +0 -36
- package/docs/en/configure/app/html/inject-by-entries.mdx +0 -36
- package/docs/en/configure/app/html/meta-by-entries.mdx +0 -48
- package/docs/en/configure/app/html/tags-by-entries.mdx +0 -44
- package/docs/en/configure/app/html/template-by-entries.mdx +0 -33
- package/docs/en/configure/app/html/template-parameters-by-entries.mdx +0 -35
- package/docs/en/configure/app/html/title-by-entries.mdx +0 -37
- package/docs/en/configure/app/output/css-module-local-ident-name.mdx +0 -21
- package/docs/en/configure/app/output/disable-css-extract.mdx +0 -16
- package/docs/en/configure/app/output/disable-filename-hash.mdx +0 -16
- package/docs/en/configure/app/output/disable-minimize.mdx +0 -14
- package/docs/en/configure/app/output/disable-node-polyfill.mdx +0 -22
- package/docs/en/configure/app/output/disable-source-map.mdx +0 -31
- package/docs/en/configure/app/output/enable-asset-fallback.mdx +0 -36
- package/docs/en/configure/app/output/enable-inline-scripts.mdx +0 -22
- package/docs/en/configure/app/output/enable-inline-styles.mdx +0 -22
- package/docs/en/configure/app/output/enable-latest-decorators.mdx +0 -14
- package/docs/en/configure/app/performance/transform-lodash.mdx +0 -52
- package/docs/en/configure/app/runtime/master-app.mdx +0 -36
- package/docs/en/configure/app/runtime/state.mdx +0 -52
- package/docs/en/configure/app/source/disable-entry-dirs.mdx +0 -38
- package/docs/en/configure/app/source/enable-custom-entry.mdx +0 -68
- package/docs/en/configure/app/source/module-scopes.mdx +0 -72
- package/docs/en/configure/app/source/resolve-extension-prefix.mdx +0 -55
- package/docs/en/configure/app/source/resolve-main-fields.mdx +0 -46
- package/docs/en/configure/app/tools/esbuild.mdx +0 -44
- package/docs/en/configure/app/tools/pug.mdx +0 -54
- package/docs/en/configure/app/tools/styled-components.mdx +0 -55
- package/docs/en/configure/app/tools/tailwindcss.mdx +0 -98
- package/docs/en/configure/app/tools/terser.mdx +0 -58
- package/docs/en/configure/app/tools/ts-loader.mdx +0 -76
- package/docs/en/configure/app/tools/webpack-chain.mdx +0 -249
- package/docs/en/configure/app/tools/webpack.mdx +0 -305
- package/docs/en/guides/deprecated.md +0 -17
- package/docs/en/guides/topic-detail/micro-frontend/c01-introduction.mdx +0 -27
- package/docs/en/guides/topic-detail/micro-frontend/c02-development.mdx +0 -290
- package/docs/en/guides/topic-detail/micro-frontend/c03-main-app.mdx +0 -298
- package/docs/en/guides/topic-detail/micro-frontend/c04-communicate.mdx +0 -58
- package/docs/en/guides/topic-detail/micro-frontend/c05-mixed-stack.mdx +0 -26
- package/docs/en/guides/topic-detail/model/_meta.json +0 -14
- package/docs/en/guides/topic-detail/model/auto-actions.mdx +0 -85
- package/docs/en/guides/topic-detail/model/computed-state.mdx +0 -148
- package/docs/en/guides/topic-detail/model/define-model.mdx +0 -62
- package/docs/en/guides/topic-detail/model/faq.mdx +0 -35
- package/docs/en/guides/topic-detail/model/manage-effects.mdx +0 -247
- package/docs/en/guides/topic-detail/model/model-communicate.mdx +0 -217
- package/docs/en/guides/topic-detail/model/performance.mdx +0 -167
- package/docs/en/guides/topic-detail/model/quick-start.mdx +0 -117
- package/docs/en/guides/topic-detail/model/redux-integration.mdx +0 -20
- package/docs/en/guides/topic-detail/model/typescript-best-practice.mdx +0 -68
- package/docs/en/guides/topic-detail/model/use-model.mdx +0 -243
- package/docs/en/guides/topic-detail/model/use-out-of-modernjs.mdx +0 -46
- package/docs/en/plugin/official/cli-plugins/plugin-swc.mdx +0 -363
- package/docs/en/plugin/official/cli-plugins/plugin-tailwind.mdx +0 -5
- package/docs/en/plugin/official/rsbuild-plugins/_meta.json +0 -1
- package/docs/en/plugin/official/rsbuild-plugins/plugin-esbuild.mdx +0 -205
- package/docs/en/plugin/official/rsbuild-plugins.mdx +0 -3
- package/docs/en/tutorials/first-app/c01-start.mdx +0 -99
- package/docs/en/tutorials/first-app/c02-component.mdx +0 -60
- package/docs/en/tutorials/first-app/c03-css.mdx +0 -324
- package/docs/en/tutorials/first-app/c04-routes.mdx +0 -172
- package/docs/en/tutorials/first-app/c05-loader.mdx +0 -87
- package/docs/en/tutorials/first-app/c06-model.mdx +0 -278
- package/docs/en/tutorials/first-app/c07-container.mdx +0 -281
- package/docs/en/tutorials/first-app/c08-entries.mdx +0 -135
- package/docs/zh/apis/app/hooks/server/index_.mdx +0 -10
- package/docs/zh/apis/app/hooks/src/index_.mdx +0 -39
- package/docs/zh/apis/app/hooks/src/stories.mdx +0 -16
- package/docs/zh/apis/app/runtime/app/define-config.mdx +0 -67
- package/docs/zh/apis/app/runtime/core/bootstrap.mdx +0 -74
- package/docs/zh/apis/app/runtime/core/create-app.mdx +0 -35
- package/docs/zh/apis/app/runtime/core/use-loader.mdx +0 -89
- package/docs/zh/apis/app/runtime/core/use-module-apps.mdx +0 -179
- package/docs/zh/apis/app/runtime/core/use-runtime-context.mdx +0 -116
- package/docs/zh/apis/app/runtime/model/Provider.mdx +0 -36
- package/docs/zh/apis/app/runtime/model/auto-actions.mdx +0 -122
- package/docs/zh/apis/app/runtime/model/connect.mdx +0 -143
- package/docs/zh/apis/app/runtime/model/create-app.mdx +0 -75
- package/docs/zh/apis/app/runtime/model/create-store.mdx +0 -61
- package/docs/zh/apis/app/runtime/model/handle-effect.mdx +0 -108
- package/docs/zh/apis/app/runtime/model/model_.mdx +0 -201
- package/docs/zh/apis/app/runtime/model/use-local-model.mdx +0 -29
- package/docs/zh/apis/app/runtime/model/use-model.mdx +0 -89
- package/docs/zh/apis/app/runtime/model/use-static-model.mdx +0 -49
- package/docs/zh/apis/app/runtime/model/use-store.mdx +0 -26
- package/docs/zh/apis/app/runtime/ssr/pre-render.mdx +0 -96
- package/docs/zh/apis/app/runtime/web-server/hook.mdx +0 -136
- package/docs/zh/apis/app/runtime/web-server/middleware.mdx +0 -114
- package/docs/zh/apis/app/runtime/web-server/unstable_middleware.mdx +0 -165
- package/docs/zh/components/bff-proxy-path-rewrite.mdx +0 -16
- package/docs/zh/components/bff-proxy-principle.mdx +0 -1
- package/docs/zh/components/builder.mdx +0 -3
- package/docs/zh/components/create-bff-api-app.mdx +0 -25
- package/docs/zh/components/custom-router-micro-frontend.mdx +0 -40
- package/docs/zh/components/enable-micro-frontend.mdx +0 -30
- package/docs/zh/components/enableSwc.mdx +0 -17
- package/docs/zh/components/global-proxy-config.mdx +0 -85
- package/docs/zh/components/global-proxy.mdx +0 -29
- package/docs/zh/components/package-manager.mdx +0 -11
- package/docs/zh/components/reduck-notify.mdx +0 -27
- package/docs/zh/components/reduck-tip.mdx +0 -8
- package/docs/zh/configure/app/auto-load-plugin.mdx +0 -66
- package/docs/zh/configure/app/deploy/microFrontend.mdx +0 -55
- package/docs/zh/configure/app/dev/port.mdx +0 -25
- package/docs/zh/configure/app/dev/proxy.mdx +0 -9
- package/docs/zh/configure/app/experiments/lazy-compilation.mdx +0 -105
- package/docs/zh/configure/app/html/disable-html-folder.mdx +0 -45
- package/docs/zh/configure/app/html/favicon-by-entries.mdx +0 -37
- package/docs/zh/configure/app/html/inject-by-entries.mdx +0 -37
- package/docs/zh/configure/app/html/meta-by-entries.mdx +0 -48
- package/docs/zh/configure/app/html/tags-by-entries.mdx +0 -44
- package/docs/zh/configure/app/html/template-by-entries.mdx +0 -33
- package/docs/zh/configure/app/html/template-parameters-by-entries.mdx +0 -36
- package/docs/zh/configure/app/html/title-by-entries.mdx +0 -37
- package/docs/zh/configure/app/output/css-module-local-ident-name.mdx +0 -21
- package/docs/zh/configure/app/output/disable-css-extract.mdx +0 -16
- package/docs/zh/configure/app/output/disable-filename-hash.mdx +0 -16
- package/docs/zh/configure/app/output/disable-minimize.mdx +0 -14
- package/docs/zh/configure/app/output/disable-node-polyfill.mdx +0 -22
- package/docs/zh/configure/app/output/disable-source-map.mdx +0 -31
- package/docs/zh/configure/app/output/enable-asset-fallback.mdx +0 -36
- package/docs/zh/configure/app/output/enable-inline-scripts.mdx +0 -22
- package/docs/zh/configure/app/output/enable-inline-styles.mdx +0 -22
- package/docs/zh/configure/app/output/enable-latest-decorators.mdx +0 -14
- package/docs/zh/configure/app/performance/transform-lodash.mdx +0 -52
- package/docs/zh/configure/app/runtime/master-app.mdx +0 -38
- package/docs/zh/configure/app/runtime/state.mdx +0 -52
- package/docs/zh/configure/app/source/disable-entry-dirs.mdx +0 -38
- package/docs/zh/configure/app/source/enable-custom-entry.mdx +0 -67
- package/docs/zh/configure/app/source/module-scopes.mdx +0 -72
- package/docs/zh/configure/app/source/resolve-extension-prefix.mdx +0 -57
- package/docs/zh/configure/app/source/resolve-main-fields.mdx +0 -46
- package/docs/zh/configure/app/tools/esbuild.mdx +0 -44
- package/docs/zh/configure/app/tools/pug.mdx +0 -54
- package/docs/zh/configure/app/tools/styled-components.mdx +0 -54
- package/docs/zh/configure/app/tools/tailwindcss.mdx +0 -98
- package/docs/zh/configure/app/tools/terser.mdx +0 -58
- package/docs/zh/configure/app/tools/ts-loader.mdx +0 -76
- package/docs/zh/configure/app/tools/webpack-chain.mdx +0 -253
- package/docs/zh/configure/app/tools/webpack.mdx +0 -305
- package/docs/zh/guides/advanced-features/rspack-start.mdx +0 -154
- package/docs/zh/guides/deprecated.md +0 -19
- package/docs/zh/guides/topic-detail/micro-frontend/c01-introduction.mdx +0 -26
- package/docs/zh/guides/topic-detail/micro-frontend/c02-development.mdx +0 -332
- package/docs/zh/guides/topic-detail/micro-frontend/c03-main-app.mdx +0 -296
- package/docs/zh/guides/topic-detail/micro-frontend/c04-communicate.mdx +0 -58
- package/docs/zh/guides/topic-detail/micro-frontend/c05-mixed-stack.mdx +0 -27
- package/docs/zh/guides/topic-detail/model/_meta.json +0 -14
- package/docs/zh/guides/topic-detail/model/auto-actions.mdx +0 -88
- package/docs/zh/guides/topic-detail/model/computed-state.mdx +0 -147
- package/docs/zh/guides/topic-detail/model/define-model.mdx +0 -63
- package/docs/zh/guides/topic-detail/model/faq.mdx +0 -36
- package/docs/zh/guides/topic-detail/model/manage-effects.mdx +0 -256
- package/docs/zh/guides/topic-detail/model/model-communicate.mdx +0 -217
- package/docs/zh/guides/topic-detail/model/performance.mdx +0 -167
- package/docs/zh/guides/topic-detail/model/quick-start.mdx +0 -117
- package/docs/zh/guides/topic-detail/model/redux-integration.mdx +0 -20
- package/docs/zh/guides/topic-detail/model/typescript-best-practice.mdx +0 -67
- package/docs/zh/guides/topic-detail/model/use-model.mdx +0 -248
- package/docs/zh/guides/topic-detail/model/use-out-of-modernjs.mdx +0 -46
- package/docs/zh/plugin/official/cli-plugins/plugin-swc.mdx +0 -351
- package/docs/zh/plugin/official/cli-plugins/plugin-tailwind.mdx +0 -5
- package/docs/zh/plugin/official/rsbuild-plugins/_meta.json +0 -1
- package/docs/zh/plugin/official/rsbuild-plugins/plugin-esbuild.mdx +0 -201
- package/docs/zh/plugin/official/rsbuild-plugins.mdx +0 -3
- package/docs/zh/tutorials/first-app/c01-start.mdx +0 -99
- package/docs/zh/tutorials/first-app/c02-component.mdx +0 -60
- package/docs/zh/tutorials/first-app/c03-css.mdx +0 -323
- package/docs/zh/tutorials/first-app/c04-routes.mdx +0 -172
- package/docs/zh/tutorials/first-app/c05-loader.mdx +0 -89
- package/docs/zh/tutorials/first-app/c06-model.mdx +0 -274
- package/docs/zh/tutorials/first-app/c07-container.mdx +0 -281
- package/docs/zh/tutorials/first-app/c08-entries.mdx +0 -135
- /package/docs/en/components/{reduck-migration.mdx → auto-upgrade.mdx} +0 -0
- /package/docs/{zh/components/reduck-migration.mdx → en/components/international/platform-support.mdx} +0 -0
|
@@ -1,290 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 2
|
|
3
|
-
title: Development
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Experience Micro Frontend
|
|
7
|
-
|
|
8
|
-
Through this chapter you can learn:
|
|
9
|
-
|
|
10
|
-
- How to create the main application and sub-application of the micro frontend project.
|
|
11
|
-
- Basic process of micro frontend project development.
|
|
12
|
-
|
|
13
|
-
## Create an app
|
|
14
|
-
|
|
15
|
-
The routing modes of the current project are divided into the following three types:
|
|
16
|
-
|
|
17
|
-
- [Conventional Routing](/guides/concept/entries.html#conventional-routing)
|
|
18
|
-
- [Self-controlled Routing](/guides/concept/entries.html#self-controlled-routing)
|
|
19
|
-
- Other (independent installation of `react-router-dom` in the project)
|
|
20
|
-
|
|
21
|
-
First, clarify the routing mode of the main application [create a file-based routing main App](#file-based-routing-main-app) or [create a self-controlled main App](#self-controlled-main-app)
|
|
22
|
-
|
|
23
|
-
In this tutorial we will create two sub-applications Table and Dashboard for the main application (Table is reduced routing, Dashboard is self-controlled routing)
|
|
24
|
-
|
|
25
|
-
### File-based Routing Main App
|
|
26
|
-
|
|
27
|
-
Initialize the project with a command line:
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
mkdir masterApp && cd masterApp
|
|
31
|
-
npx @modern-js/create@latest
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
After the project is created, we can enable the `micro frontend` through `pnpm run new`:
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
? Please select the operation you want: Enable features
|
|
38
|
-
? Please select the feature name: Enable Micro Front-end Feature
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Next, let's register the micro frontend plugin and add the main micro frontend app and add the list of sub-apps:
|
|
42
|
-
|
|
43
|
-
import EnableMicroFrontend from '@site-docs-en/components/enable-micro-frontend';
|
|
44
|
-
|
|
45
|
-
<EnableMicroFrontend />
|
|
46
|
-
|
|
47
|
-
Then we create two new directories in the routes folder
|
|
48
|
-
|
|
49
|
-
- table (for loading conventional routing sub-applications)
|
|
50
|
-
- dashboard (for loading self-controlled routing sub-applications)
|
|
51
|
-
|
|
52
|
-
In these two directories, we need to create a `$.tsx` file as the entry of the main application convention route ($represents fuzzy match, that is, `/table` and `/table/test` will match this `$.tsx` as the entry file of the route, which will ensure that the sub-application route is loaded correctly in the micro frontend scenario)
|
|
53
|
-
|
|
54
|
-
#### Load file-base routing sub-app
|
|
55
|
-
|
|
56
|
-
```js title="src/routes/table/$.tsx"
|
|
57
|
-
import { useModuleApps } from '@modern-js/plugin-garfish/runtime';
|
|
58
|
-
|
|
59
|
-
const Index = () => {
|
|
60
|
-
const { Table } = useModuleApps();
|
|
61
|
-
|
|
62
|
-
return (
|
|
63
|
-
<div>
|
|
64
|
-
<Table />
|
|
65
|
-
</div>
|
|
66
|
-
);
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
export default Index;
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
#### Load self-controlled routing sub-app
|
|
73
|
-
|
|
74
|
-
```js title="src/routes/dashboard/$.tsx"
|
|
75
|
-
import { useModuleApps } from '@modern-js/plugin-garfish/runtime';
|
|
76
|
-
|
|
77
|
-
const Index = () => {
|
|
78
|
-
const { Dashboard } = useModuleApps();
|
|
79
|
-
|
|
80
|
-
return (
|
|
81
|
-
<div>
|
|
82
|
-
<Dashboard />
|
|
83
|
-
</div>
|
|
84
|
-
);
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
export default Index;
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
#### route link
|
|
91
|
-
|
|
92
|
-
At this time, the main application configuration has been completed, and the sub-application can be loaded through the route, and the `layout.tsx` of the main application can be modified to jump to the route:
|
|
93
|
-
|
|
94
|
-
```js title="src/route/layout.tsx"
|
|
95
|
-
import { Outlet, Link } from '@modern-js/runtime/router';
|
|
96
|
-
|
|
97
|
-
const Layout = () => (
|
|
98
|
-
<div>
|
|
99
|
-
<div>
|
|
100
|
-
<Link to={'/table'}>Load file-base routing sub-app</Link>
|
|
101
|
-
</div>
|
|
102
|
-
<div>
|
|
103
|
-
<Link to={'/dashboard'}>Load self-controlled routing sub-app</Link>
|
|
104
|
-
</div>
|
|
105
|
-
<div>
|
|
106
|
-
<Link to={'/'}>unmount sub-app</Link>
|
|
107
|
-
</div>
|
|
108
|
-
<Outlet />
|
|
109
|
-
</div>
|
|
110
|
-
);
|
|
111
|
-
|
|
112
|
-
export default Layout;
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### Self-Controlled Main App
|
|
116
|
-
|
|
117
|
-
Initialize the project with a command line:
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
mkdir masterApp && cd masterApp
|
|
121
|
-
npx @modern-js/create@latest
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
After the project is created, we can enable the `micro frontend` function through `pnpm run new`:
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
? Please select the operation you want: Enable features
|
|
128
|
-
? Please select the feature name: Enable Micro Front-end Feature
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
Next, let's register the micro frontend plugin and add the main micro frontend app and add the list of sub-apps:
|
|
132
|
-
|
|
133
|
-
<EnableMicroFrontend />
|
|
134
|
-
|
|
135
|
-
Since it is a self-controlled route, we delete the `routes/` folder and add the `App.tsx` file in the `src/` directory. If you use a `non-MApp` component here, you need to use the `createBrowserRouter` API of '=React Router v6 to create routes.
|
|
136
|
-
|
|
137
|
-
#### Load sub-app
|
|
138
|
-
|
|
139
|
-
import CustomRouterMicroFrontend from '@site-docs-en/components/custom-router-micro-frontend';
|
|
140
|
-
|
|
141
|
-
<CustomRouterMicroFrontend />
|
|
142
|
-
|
|
143
|
-
### Other Main App
|
|
144
|
-
|
|
145
|
-
Install and use `react-router-dom` independently in the project. The only difference from self-controlled routing is that after setting `router: false`, plugin-garfish cannot obtain `useLocation`, `useHref` and other hooks to assist in calculating basename and main and child applications. Route synchronization
|
|
146
|
-
|
|
147
|
-
import { Tab, Tabs } from 'rspress/theme';
|
|
148
|
-
|
|
149
|
-
<Tabs>
|
|
150
|
-
<Tab label="react-router-dom@6">
|
|
151
|
-
```tsx
|
|
152
|
-
import { useLocation, useHref } from 'react-router-dom';
|
|
153
|
-
const App = () => {
|
|
154
|
-
const basename = useHref('/table');
|
|
155
|
-
const { Table } = useModuleApps();
|
|
156
|
-
return <Table useLocation={useLocation} basename={basename} />;
|
|
157
|
-
};
|
|
158
|
-
```
|
|
159
|
-
</Tab>
|
|
160
|
-
<Tab label="react-router-dom@5">
|
|
161
|
-
```tsx
|
|
162
|
-
import { useLocation, useHistory } from 'react-router-dom';
|
|
163
|
-
const App = () => {
|
|
164
|
-
const history = useHistory();
|
|
165
|
-
const basename = history.createHref({ pathname: '/table' });
|
|
166
|
-
const { Table } = useModuleApps();
|
|
167
|
-
return <Table useLocation={useLocation} basename={basename} />;
|
|
168
|
-
};
|
|
169
|
-
```
|
|
170
|
-
</Tab>
|
|
171
|
-
</Tabs>
|
|
172
|
-
|
|
173
|
-
### File-based sub-app
|
|
174
|
-
|
|
175
|
-
Initialize the project with a command line:
|
|
176
|
-
|
|
177
|
-
```bash
|
|
178
|
-
mkdir table && cd table
|
|
179
|
-
npx @modern-js/create@latest
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
After create sub-app. We execute `pnpm run new` to enable the `micro frontend` function:
|
|
183
|
-
|
|
184
|
-
```bash
|
|
185
|
-
? Please select the operation you want: Enable features
|
|
186
|
-
? Please select the feature name: Enable Micro Front-end Feature
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
Next, let's register the micro frontend plugin and modify `modern.config.ts` to add the configuration of the micro frontend sub-app `deploy.microFrontend`:
|
|
190
|
-
|
|
191
|
-
```js title="modern.config.ts"
|
|
192
|
-
import { appTools, defineConfig } from '@modern-js/app-tools';
|
|
193
|
-
import { garfishPlugin } from '@modern-js/plugin-garfish';
|
|
194
|
-
|
|
195
|
-
export default defineConfig({
|
|
196
|
-
dev: {
|
|
197
|
-
port: 8081,
|
|
198
|
-
},
|
|
199
|
-
runtime: {
|
|
200
|
-
router: true,
|
|
201
|
-
},
|
|
202
|
-
deploy: {
|
|
203
|
-
microFrontend: true,
|
|
204
|
-
},
|
|
205
|
-
plugins: [appTools(), garfishPlugin()],
|
|
206
|
-
});
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
add `src/routes/page.tsx`:
|
|
210
|
-
|
|
211
|
-
```js title="src/routes/page.tsx"
|
|
212
|
-
const Index = () => {
|
|
213
|
-
return <div className="container-box">subApp</div>;
|
|
214
|
-
};
|
|
215
|
-
|
|
216
|
-
export default Index;
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
### Self-controlled sub-app
|
|
220
|
-
|
|
221
|
-
Initialize the project with a command line:
|
|
222
|
-
|
|
223
|
-
```bash
|
|
224
|
-
mkdir table && cd table
|
|
225
|
-
npx @modern-js/create@latest
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
After create sub-app. We execute `pnpm run new` to enable the `micro frontend` function:
|
|
229
|
-
|
|
230
|
-
```bash
|
|
231
|
-
? Please select the operation you want: Enable features
|
|
232
|
-
? Please select the feature name: Enable Micro Front-end Feature
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
Next, let's register the micro frontend plugin and modify `modern.config.ts` to add the configuration of the micro frontend sub-app `deploy.microFrontend`:
|
|
236
|
-
|
|
237
|
-
```js title="modern.config.ts"
|
|
238
|
-
import { appTools, defineConfig } from '@modern-js/app-tools';
|
|
239
|
-
import { garfishPlugin } from '@modern-js/plugin-garfish';
|
|
240
|
-
|
|
241
|
-
export default defineConfig({
|
|
242
|
-
dev: {
|
|
243
|
-
port: 8082,
|
|
244
|
-
},
|
|
245
|
-
runtime: {
|
|
246
|
-
router: true,
|
|
247
|
-
},
|
|
248
|
-
deploy: {
|
|
249
|
-
microFrontend: true,
|
|
250
|
-
},
|
|
251
|
-
plugins: [appTools(), garfishPlugin()],
|
|
252
|
-
});
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
Self-controlled routing needs to delete the `routes/` folder and create a new `App.tsx` in the `src/` directory.
|
|
256
|
-
|
|
257
|
-
And add code in `src/App.tsx`, note that you need to parse from `props` and pass `basename` to `BrowserRouter`.
|
|
258
|
-
|
|
259
|
-
```js title="src/App.tsx"
|
|
260
|
-
import { BrowserRouter, Route, Routes } from '@modern-js/runtime/router';
|
|
261
|
-
|
|
262
|
-
export default (props: { basename: string }) => {
|
|
263
|
-
const { basename } = props;
|
|
264
|
-
|
|
265
|
-
return (
|
|
266
|
-
<BrowserRouter basename={basename}>
|
|
267
|
-
<Routes>
|
|
268
|
-
<Route index element={<div>Self-controlled route root</div>} />
|
|
269
|
-
<Route path={'path'} element={<div>Self-controlled sub route</div>} />
|
|
270
|
-
</Routes>
|
|
271
|
-
</BrowserRouter>
|
|
272
|
-
);
|
|
273
|
-
};
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
## Debug
|
|
277
|
-
|
|
278
|
-
Start the application by executing the `pnpm run dev` command in the directory in sequence:
|
|
279
|
-
|
|
280
|
-
- masterApp `http://localhost:8080`
|
|
281
|
-
- table subapplication (conventional routing) `http://localhost:8081`
|
|
282
|
-
- dashboard subapplication (self-controlled routing) `http://localhost:8082`
|
|
283
|
-
|
|
284
|
-
Access the main application address `http://localhost:8080`
|
|
285
|
-
|
|
286
|
-
After completing the experience of the overall development process of micro frontend, you can learn more about how to [develop the main application](/guides/topic-detail/micro-frontend/c03-main-app).
|
|
287
|
-
|
|
288
|
-
## FAQ
|
|
289
|
-
|
|
290
|
-
Garfish issue: https://www.garfishjs.org/issues/
|
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 3
|
|
3
|
-
title: Develop Main App
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Develop Main App
|
|
7
|
-
|
|
8
|
-
In the previous [Experience micro frontend](/guides/topic-detail/micro-frontend/c02-development), an example was used to demonstrate how to create and configure micro frontend sub-applications. Through this chapter, you can further understand how to develop the main application, and its common configuration.
|
|
9
|
-
|
|
10
|
-
After creating an Modern.js project through the `@modern-js/create` command, you can execute `pnpm run new` in the project (the `modern new` command is actually executed). After selecting the 「micro frontend」 mode, the micro frontend will be installed. Dependencies, just register the plugin manually.
|
|
11
|
-
|
|
12
|
-
import EnableMicroFrontend from '@site-docs-en/components/enable-micro-frontend';
|
|
13
|
-
|
|
14
|
-
<EnableMicroFrontend />
|
|
15
|
-
|
|
16
|
-
## Register Sub-app
|
|
17
|
-
|
|
18
|
-
When the information is provided on the `masterApp` configuration, the application will be considered the main application. At present, there are two configuration methods for sub-app information, and these two methods are applied to different scenarios.
|
|
19
|
-
|
|
20
|
-
### Register sub-app info directly
|
|
21
|
-
|
|
22
|
-
You can register the sub-application information directly through the configuration:
|
|
23
|
-
|
|
24
|
-
:::tip
|
|
25
|
-
It can be configured at runtime via the API [defineConfig](/apis/app/runtime/app/define-config).
|
|
26
|
-
|
|
27
|
-
When the parameter is a function, it cannot be serialized to the output code, so please configure it through defineConfig when it comes to configuration such as functions
|
|
28
|
-
:::
|
|
29
|
-
|
|
30
|
-
import MicroRuntimeConfig from '@site-docs-en/components/micro-runtime-config';
|
|
31
|
-
|
|
32
|
-
<MicroRuntimeConfig />
|
|
33
|
-
|
|
34
|
-
### Custom remote app list
|
|
35
|
-
|
|
36
|
-
This function allows you to pull a list of remote child applications and register them with the runtime framework:
|
|
37
|
-
|
|
38
|
-
```ts title="src/modern.runtime.ts"
|
|
39
|
-
import { defineRuntimeConfig } from '@modern-js/runtime';
|
|
40
|
-
|
|
41
|
-
export default defineRuntimeConfig({
|
|
42
|
-
masterApp: {
|
|
43
|
-
manifest: {
|
|
44
|
-
getAppList: async () => {
|
|
45
|
-
// get from remote api
|
|
46
|
-
return [
|
|
47
|
-
{
|
|
48
|
-
name: 'Table',
|
|
49
|
-
entry: 'http://localhost:8081',
|
|
50
|
-
// activeWhen: '/table'
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
name: 'Dashboard',
|
|
54
|
-
entry: 'http://localhost:8082',
|
|
55
|
-
// activeWhen: '/dashboard'
|
|
56
|
-
},
|
|
57
|
-
];
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## Renderer sub-app
|
|
65
|
-
|
|
66
|
-
There are two ways to load sub-app in micro frontend:
|
|
67
|
-
|
|
68
|
-
1. **Sub-app component ** Get the components of each sub-app, and then you can render the sub-app of micro frontend just like using ordinary'React 'components.
|
|
69
|
-
2. **Centralized routing** Through centralized routing configuration, the corresponding sub-app of rendering is automatically activated according to the current page `pathname`.
|
|
70
|
-
|
|
71
|
-
### Sub-app component
|
|
72
|
-
|
|
73
|
-
Developers can use the `useModuleApps` method to obtain the components of each child application.
|
|
74
|
-
|
|
75
|
-
Through the combined use of the `router` component, developers can autonomously render different sub-applications according to different routes.
|
|
76
|
-
|
|
77
|
-
Suppose our subapp list is configured as follows:
|
|
78
|
-
|
|
79
|
-
<EnableMicroFrontend />
|
|
80
|
-
|
|
81
|
-
`App.tsx` as follow:
|
|
82
|
-
|
|
83
|
-
```js title="App.tsx"
|
|
84
|
-
import { useModuleApps } from '@modern-js/plugin-garfish/runtime';
|
|
85
|
-
|
|
86
|
-
import {
|
|
87
|
-
RouterProvider,
|
|
88
|
-
Route,
|
|
89
|
-
createBrowserRouter,
|
|
90
|
-
createRoutesFromElements,
|
|
91
|
-
BrowserRouter,
|
|
92
|
-
Link,
|
|
93
|
-
Outlet,
|
|
94
|
-
} from '@modern-js/runtime/router';
|
|
95
|
-
|
|
96
|
-
const AppLayout = () => (
|
|
97
|
-
<>
|
|
98
|
-
<div>
|
|
99
|
-
<Link to={'/table'}>load file-based sub-app</Link>
|
|
100
|
-
</div>
|
|
101
|
-
<div>
|
|
102
|
-
<Link to={'/dashboard'}>load self-controlled sub-app</Link>
|
|
103
|
-
</div>
|
|
104
|
-
<div>
|
|
105
|
-
<Link to={'/'}>unmount sub-app</Link>
|
|
106
|
-
</div>
|
|
107
|
-
<Outlet />
|
|
108
|
-
</>
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
export default () => {
|
|
112
|
-
const { apps, MApp } = useModuleApps();
|
|
113
|
-
|
|
114
|
-
// Instead of using the MApp component, you need to use createBrowserRouter to create the route
|
|
115
|
-
const router = createBrowserRouter(
|
|
116
|
-
createRoutesFromElements(
|
|
117
|
-
<Route path="/" element={<AppLayout />}>
|
|
118
|
-
{apps.map(app => {
|
|
119
|
-
const { Component } = app;
|
|
120
|
-
// Fuzzy match, path needs to be written in a pattern similar to abc/*
|
|
121
|
-
return (
|
|
122
|
-
<Route
|
|
123
|
-
key={app.name}
|
|
124
|
-
path={`${app.name.toLowerCase()}/*`}
|
|
125
|
-
element={
|
|
126
|
-
<Component
|
|
127
|
-
loadable={{
|
|
128
|
-
loading: ({ pastDelay, error }: any) => {
|
|
129
|
-
if (error) {
|
|
130
|
-
return <div>error: {error?.message}</div>;
|
|
131
|
-
} else if (pastDelay) {
|
|
132
|
-
return <div>loading</div>;
|
|
133
|
-
} else {
|
|
134
|
-
return null;
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
}}
|
|
138
|
-
/>
|
|
139
|
-
}
|
|
140
|
-
/>
|
|
141
|
-
);
|
|
142
|
-
})}
|
|
143
|
-
</Route>,
|
|
144
|
-
),
|
|
145
|
-
);
|
|
146
|
-
|
|
147
|
-
return (
|
|
148
|
-
// Use MApp to automatically load sub-applications according to the configured activeWhen parameters (this project is configured in modern.config.ts)
|
|
149
|
-
// <BrowserRouter>
|
|
150
|
-
// <MApp />
|
|
151
|
-
// </BrowserRouter>
|
|
152
|
-
|
|
153
|
-
// Manually write the Route component to load the sub-application, which is convenient for scenarios that require pre-operation such as authentication
|
|
154
|
-
<>
|
|
155
|
-
<RouterProvider router={router} />
|
|
156
|
-
</>
|
|
157
|
-
);
|
|
158
|
-
};
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
Here, the activation route of **Table** is customized as **/table** through the `Route` component, and the activation route of **Dashboard** is **/dashboard**.
|
|
162
|
-
|
|
163
|
-
### Centralized routing
|
|
164
|
-
|
|
165
|
-
**Centralized Routing** is a way to centrally configure active routes for subapps. We enable **Centralized Routing** by adding an `activeWhen` field to the subapp list information.
|
|
166
|
-
|
|
167
|
-
<MicroRuntimeConfig />
|
|
168
|
-
|
|
169
|
-
Use `useModuleApp` api in Main App, get `MApp` component and then render it
|
|
170
|
-
|
|
171
|
-
```tsx title=Main App: App.tsx
|
|
172
|
-
import { useModuleApp } from '@modern-js/plugin-garfish/runtime';
|
|
173
|
-
|
|
174
|
-
function App() {
|
|
175
|
-
const { MApp } = useModuleApps();
|
|
176
|
-
|
|
177
|
-
return (
|
|
178
|
-
<div>
|
|
179
|
-
<MApp />
|
|
180
|
-
</div>
|
|
181
|
-
);
|
|
182
|
-
}
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
After starting the application in this way, accessing the '/table' route will render the'Table 'sub-application, and accessing the'/dashboard 'route will render the'Dashboard' sub-application.
|
|
186
|
-
|
|
187
|
-
### Mix Mode
|
|
188
|
-
|
|
189
|
-
Of course, **sub-application components** and **centralized routing** can be mixed.
|
|
190
|
-
|
|
191
|
-
- One molecular application is activated as a **sub-application component**, and the other part is activated as a **centralized routing**.
|
|
192
|
-
- A molecular application can be activated either as a **centralized routing** or as a **sub-application component**.
|
|
193
|
-
|
|
194
|
-
### Loading
|
|
195
|
-
|
|
196
|
-
By configuring the `loadable` configuration, loading components can be added for 「centralized routing」 and 「sub-applicati」, and errors, timeouts, flashes, etc. can be considered, so as to provide users with a better user experience. The design and implementation of this function refer to [react-loadable](https://github.com/jamiebuilds/react-loadable), and the basic functions are similar.
|
|
197
|
-
|
|
198
|
-
```tsx
|
|
199
|
-
function Loading() {
|
|
200
|
-
return <div>Loading...</div>;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
function App(){
|
|
204
|
-
return <>
|
|
205
|
-
<Table
|
|
206
|
-
loadable={{
|
|
207
|
-
loading: Loading,
|
|
208
|
-
}}
|
|
209
|
-
/>
|
|
210
|
-
<>
|
|
211
|
-
}
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
#### Add Error Status
|
|
215
|
-
|
|
216
|
-
When the micro-frontend sub-application fails to load or render, the `loading component` will receive the `error` parameter (if there is no error, the error is null).
|
|
217
|
-
|
|
218
|
-
```tsx
|
|
219
|
-
function Loading({ error }) {
|
|
220
|
-
if (error) {
|
|
221
|
-
return <div>Error msg {error?.message}</div>;
|
|
222
|
-
} else {
|
|
223
|
-
return <div>Loading...</div>;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
#### Avoid Loading Flash Back
|
|
229
|
-
|
|
230
|
-
Sometimes the display time of the loading component may be less than 200ms, and the loading component will flash back at this time. Many user studies have proved that the loading flash back situation will cause the user to perceive that the loading content takes longer than the actual time.
|
|
231
|
-
|
|
232
|
-
When loading is less than 200ms, if the content is not displayed, the user will think it is faster.
|
|
233
|
-
|
|
234
|
-
Therefore, the loading component also provides the `pastDelay` parameter, which will only be true when it exceeds the set delay display. You can set the delay duration through the `delay` parameter.
|
|
235
|
-
|
|
236
|
-
```tsx
|
|
237
|
-
function Loading({ error, pastDelay }) {
|
|
238
|
-
if (error) {
|
|
239
|
-
return <div>Error! {error?.message}</div>;
|
|
240
|
-
} else if (pastDelay) {
|
|
241
|
-
return <div>Loading...</div>;
|
|
242
|
-
} else {
|
|
243
|
-
return null;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
The default value of `delay` is `200ms`, you can set the delay display time through `delay` in `loadable`.
|
|
249
|
-
|
|
250
|
-
```tsx
|
|
251
|
-
|
|
252
|
-
function App(){
|
|
253
|
-
return <>
|
|
254
|
-
<Table
|
|
255
|
-
loadable={{
|
|
256
|
-
loading: Loading,
|
|
257
|
-
delay: 300 // 0.3 seconds
|
|
258
|
-
}}
|
|
259
|
-
/>
|
|
260
|
-
<>
|
|
261
|
-
}
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
#### Add Timeout State
|
|
265
|
-
|
|
266
|
-
Sometimes because of the network, the micro-front-end sub-application fails to load, resulting in the loading state being displayed all the time, which is very bad for users, because they don't know the right response to get a specific response, whether they need to refresh the page, by Increasing the timeout state can solve this problem well.
|
|
267
|
-
|
|
268
|
-
The loading component will get the `timeOut` parameter when timeout, when the micro frontend application loads timeout, it will get the `timeOut` property value of true.
|
|
269
|
-
|
|
270
|
-
```tsx
|
|
271
|
-
function Loading({ error, timeOut, pastDelay }) {
|
|
272
|
-
if (error) {
|
|
273
|
-
return <div>Error! {error?.message}</div>;
|
|
274
|
-
} else if (timeOut) {
|
|
275
|
-
return <div>Loading timed out, please refresh the page... </div>;
|
|
276
|
-
} else if (pastDelay) {
|
|
277
|
-
return <div>Loading...</div>;
|
|
278
|
-
} else {
|
|
279
|
-
return null;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
The timeout state is off and can be enabled by setting the `timeout` parameter in `loadable`:
|
|
285
|
-
|
|
286
|
-
```tsx
|
|
287
|
-
|
|
288
|
-
function App(){
|
|
289
|
-
return <>
|
|
290
|
-
<Table
|
|
291
|
-
loadable={{
|
|
292
|
-
loading: Loading,
|
|
293
|
-
timeOut: 10000 // 10s
|
|
294
|
-
}}
|
|
295
|
-
/>
|
|
296
|
-
<>
|
|
297
|
-
}
|
|
298
|
-
```
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 4
|
|
3
|
-
title: Communicate
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Communicate
|
|
7
|
-
|
|
8
|
-
## Props
|
|
9
|
-
|
|
10
|
-
In Modern.js, the sub-application will be wrapped into a React component, and the purpose of communicating between the main application and the sub-application can be achieved directly by passing'props' to the React component.
|
|
11
|
-
|
|
12
|
-
```tsx title=Main: App.tsx
|
|
13
|
-
function App() {
|
|
14
|
-
const { MApp } = useModuleApps();
|
|
15
|
-
|
|
16
|
-
return (
|
|
17
|
-
<div>
|
|
18
|
-
<MApp count={100} />
|
|
19
|
-
</div>
|
|
20
|
-
);
|
|
21
|
-
}
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
```tsx title=Main: App.tsx
|
|
25
|
-
function App(props) {
|
|
26
|
-
console.log(props);
|
|
27
|
-
return ...
|
|
28
|
-
}
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
The child application will print `{count: 0}`. Currently, child application rendering responsiveness is not supported. Changing the data of'count 'on the main application in time will not trigger a view update
|
|
32
|
-
|
|
33
|
-
## channel
|
|
34
|
-
|
|
35
|
-
[Garfish.channel] (https://www.garfishjs.org/api/channel) Used for communication between applications. It is an instance of `EventEmitter2`.
|
|
36
|
-
|
|
37
|
-
```ts
|
|
38
|
-
// sub app listen login event
|
|
39
|
-
const App = () => {
|
|
40
|
-
const handleLogin = userInfo => {
|
|
41
|
-
console.log(`${userInfo.name} has login`);
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
useEffect(() => {
|
|
45
|
-
window?.Garfish.channel.on('login', handleLogin);
|
|
46
|
-
return () => {
|
|
47
|
-
window?.Garfish.channel.removeListener('login', handleLogin);
|
|
48
|
-
};
|
|
49
|
-
});
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
// main app emit login event
|
|
53
|
-
api.getLoginInfo.then(res => {
|
|
54
|
-
if (res.code === 0) {
|
|
55
|
-
window.Garfish.channel.emit('login', res.data);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
```
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 5
|
|
3
|
-
title: Mixed Stack
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Mixed Stack
|
|
7
|
-
|
|
8
|
-
The Modern.js micro frontend scheme is based on the [Garfish](https://garfishjs.org/) package and provides some more out-of-the-box usage.
|
|
9
|
-
|
|
10
|
-
When your main application and sub-application are not all Modern.js applications, you can refer to this document.
|
|
11
|
-
|
|
12
|
-
1. The sub-app is **Modern.js**, the native Garfish micro frontend used by the main app.
|
|
13
|
-
2. The main application is **Modern.js**, and some sub-applications have other technology stacks.
|
|
14
|
-
|
|
15
|
-
## Modern.js Sub App
|
|
16
|
-
|
|
17
|
-
**Modern.js** subapps compile to generate a standard [Garfish subapp export](https://www.garfishjs.org/guide/start#2%E5%AF%BC%E5%87%BA-provider-%E5%87%BD%E6%95%B0).
|
|
18
|
-
So you can directly access the standard micro frontend main application.
|
|
19
|
-
|
|
20
|
-
:::info
|
|
21
|
-
The child application is **Modern.js**, when the main application uses the native Garfish micro frontend, the **child application debugging mode** is not available.
|
|
22
|
-
:::
|
|
23
|
-
|
|
24
|
-
## Modern.js Main App
|
|
25
|
-
|
|
26
|
-
The Main App is **Modern.js**, and other technology stacks used by sub-applications. Sub-App can be developed according to [Garfish Sub-Application Standard](https://www.garfishjs.org/guide/demo/react).
|