diff --git a/apps/bundle-size/src/bootstrap.tsx b/apps/bundle-size/src/bootstrap.tsx deleted file mode 100644 index 3493ec10cf4..00000000000 --- a/apps/bundle-size/src/bootstrap.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React, { StrictMode } from 'react'; -import { init } from '@module-federation/enhanced/runtime'; -import * as ReactDOM from 'react-dom/client'; -import HelloWorld from './HelloWorld'; - -init({ - name: 'bundle_size', - remotes: [], // No remote references needed -}); - -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement, -); -root.render( - - - , -); diff --git a/apps/bundle-size/src/index.ts b/apps/bundle-size/src/index.ts index f994cb80876..17422bb5fe3 100644 --- a/apps/bundle-size/src/index.ts +++ b/apps/bundle-size/src/index.ts @@ -1,3 +1,19 @@ +import React, { StrictMode } from 'react'; import { init } from '@module-federation/enhanced/runtime'; +import * as ReactDOM from 'react-dom/client'; +import HelloWorld from './HelloWorld'; -require('./bootstrap'); +init({ + name: 'bundle_size', + remotes: [], // No remote references needed +}); + +const rootElement = document.getElementById('root'); +if (!rootElement) { + throw new Error('Failed to find the root element'); +} + +const root = ReactDOM.createRoot(rootElement); +root.render( + React.createElement(StrictMode, null, React.createElement(HelloWorld)), +); diff --git a/apps/esbuild/mfe1/bootstrap.tsx b/apps/esbuild/mfe1/bootstrap.tsx deleted file mode 100644 index 6714ecb5596..00000000000 --- a/apps/esbuild/mfe1/bootstrap.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { App } from './app'; - -ReactDOM.render( - - - , - document.getElementById('root'), -); diff --git a/apps/esbuild/mfe1/federation.config.js b/apps/esbuild/mfe1/federation.config.js index c23cc5c75fc..5b4a26b4bc6 100644 --- a/apps/esbuild/mfe1/federation.config.js +++ b/apps/esbuild/mfe1/federation.config.js @@ -5,6 +5,9 @@ const { module.exports = withFederation({ name: 'mfe1', + experiments: { + asyncStartup: true, + }, filename: './mfe1/remoteEntry.js', exposes: { './component': './mfe1/app', diff --git a/apps/esbuild/mfe1/main.ts b/apps/esbuild/mfe1/main.ts index e5979bc0898..802310ae74d 100644 --- a/apps/esbuild/mfe1/main.ts +++ b/apps/esbuild/mfe1/main.ts @@ -1,3 +1,8 @@ -(async () => { - await import('./bootstrap'); -})(); +import React from 'react'; +import ReactDOM from 'react-dom'; +import { App } from './app'; + +ReactDOM.render( + React.createElement(React.StrictMode, null, React.createElement(App, null)), + document.getElementById('root'), +); diff --git a/apps/esbuild/shell/bootstrap.tsx b/apps/esbuild/shell/bootstrap.tsx deleted file mode 100644 index d6e16e35feb..00000000000 --- a/apps/esbuild/shell/bootstrap.tsx +++ /dev/null @@ -1,16 +0,0 @@ -//@ts-nocheck - -import React from 'react'; -import ReactDOM from 'react-dom'; -import { App } from './app'; - -import { of } from 'rxjs'; - -console.log(of); - -ReactDOM.render( - - - , - document.getElementById('root'), -); diff --git a/apps/esbuild/shell/federation.config.js b/apps/esbuild/shell/federation.config.js index 9f43d56718f..93a091338da 100644 --- a/apps/esbuild/shell/federation.config.js +++ b/apps/esbuild/shell/federation.config.js @@ -7,6 +7,9 @@ const { module.exports = withFederation({ name: 'host', + experiments: { + asyncStartup: true, + }, filename: './shell/remoteEntry.js', remotes: { mfe1: 'http://localhost:3001/remoteEntry.js', diff --git a/apps/esbuild/shell/main.ts b/apps/esbuild/shell/main.ts index aef4734ce95..9b4e44070f3 100644 --- a/apps/esbuild/shell/main.ts +++ b/apps/esbuild/shell/main.ts @@ -1,5 +1,14 @@ //@ts-nocheck -(async () => { - import('./bootstrap'); -})(); +import React from 'react'; +import ReactDOM from 'react-dom'; +import { App } from './app'; + +import { of } from 'rxjs'; + +console.log(of); + +ReactDOM.render( + React.createElement(React.StrictMode, null, React.createElement(App, null)), + document.getElementById('root'), +); diff --git a/apps/manifest-demo/3009-webpack-provider/src/bootstrap.tsx b/apps/manifest-demo/3009-webpack-provider/src/bootstrap.tsx deleted file mode 100644 index e1ff62d67ff..00000000000 --- a/apps/manifest-demo/3009-webpack-provider/src/bootstrap.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { StrictMode } from 'react'; -import * as ReactDOM from 'react-dom/client'; - -import App from './App'; - -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement, -); -root.render( - - - , -); diff --git a/apps/manifest-demo/3009-webpack-provider/src/index.ts b/apps/manifest-demo/3009-webpack-provider/src/index.ts index b93c7a0268a..737ae3b595f 100644 --- a/apps/manifest-demo/3009-webpack-provider/src/index.ts +++ b/apps/manifest-demo/3009-webpack-provider/src/index.ts @@ -1 +1,12 @@ -import('./bootstrap'); +import React, { StrictMode } from 'react'; +import * as ReactDOM from 'react-dom/client'; + +import App from './App'; + +const rootElement = document.getElementById('root'); +if (!rootElement) { + throw new Error('Failed to find the root element'); +} + +const root = ReactDOM.createRoot(rootElement); +root.render(React.createElement(StrictMode, null, React.createElement(App))); diff --git a/apps/manifest-demo/3009-webpack-provider/webpack.config.js b/apps/manifest-demo/3009-webpack-provider/webpack.config.js index 341d32aa353..fe227b9fde4 100644 --- a/apps/manifest-demo/3009-webpack-provider/webpack.config.js +++ b/apps/manifest-demo/3009-webpack-provider/webpack.config.js @@ -117,6 +117,7 @@ module.exports = (_env, argv = {}) => { }, }, experiments: { + asyncStartup: true, externalRuntime: true, }, }), diff --git a/apps/manifest-demo/3010-rspack-provider/rspack.config.js b/apps/manifest-demo/3010-rspack-provider/rspack.config.js index 9d64e7992a8..7acd8011be5 100644 --- a/apps/manifest-demo/3010-rspack-provider/rspack.config.js +++ b/apps/manifest-demo/3010-rspack-provider/rspack.config.js @@ -94,6 +94,7 @@ module.exports = (_env, argv = {}) => { }, dataPrefetch: true, experiments: { + asyncStartup: true, externalRuntime: true, }, }), diff --git a/apps/manifest-demo/3010-rspack-provider/src/bootstrap.tsx b/apps/manifest-demo/3010-rspack-provider/src/bootstrap.tsx deleted file mode 100644 index e1ff62d67ff..00000000000 --- a/apps/manifest-demo/3010-rspack-provider/src/bootstrap.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { StrictMode } from 'react'; -import * as ReactDOM from 'react-dom/client'; - -import App from './App'; - -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement, -); -root.render( - - - , -); diff --git a/apps/manifest-demo/3010-rspack-provider/src/index.ts b/apps/manifest-demo/3010-rspack-provider/src/index.ts index b93c7a0268a..737ae3b595f 100644 --- a/apps/manifest-demo/3010-rspack-provider/src/index.ts +++ b/apps/manifest-demo/3010-rspack-provider/src/index.ts @@ -1 +1,12 @@ -import('./bootstrap'); +import React, { StrictMode } from 'react'; +import * as ReactDOM from 'react-dom/client'; + +import App from './App'; + +const rootElement = document.getElementById('root'); +if (!rootElement) { + throw new Error('Failed to find the root element'); +} + +const root = ReactDOM.createRoot(rootElement); +root.render(React.createElement(StrictMode, null, React.createElement(App))); diff --git a/apps/manifest-demo/3011-rspack-manifest-provider/rspack.config.js b/apps/manifest-demo/3011-rspack-manifest-provider/rspack.config.js index e7bfc567133..d650b6984e4 100644 --- a/apps/manifest-demo/3011-rspack-manifest-provider/rspack.config.js +++ b/apps/manifest-demo/3011-rspack-manifest-provider/rspack.config.js @@ -94,6 +94,7 @@ module.exports = (_env, argv = {}) => { }, }, experiments: { + asyncStartup: true, externalRuntime: true, }, }), diff --git a/apps/manifest-demo/3012-rspack-js-entry-provider/rspack.config.js b/apps/manifest-demo/3012-rspack-js-entry-provider/rspack.config.js index 5bc91b20d40..8fa54e6e022 100644 --- a/apps/manifest-demo/3012-rspack-js-entry-provider/rspack.config.js +++ b/apps/manifest-demo/3012-rspack-js-entry-provider/rspack.config.js @@ -95,6 +95,7 @@ module.exports = (_env, argv = {}) => { }, manifest: false, experiments: { + asyncStartup: true, externalRuntime: true, }, }), diff --git a/apps/manifest-demo/3012-rspack-js-entry-provider/src/bootstrap.jsx b/apps/manifest-demo/3012-rspack-js-entry-provider/src/bootstrap.jsx deleted file mode 100644 index ba63c11c08a..00000000000 --- a/apps/manifest-demo/3012-rspack-js-entry-provider/src/bootstrap.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import { createRoot } from 'react-dom/client'; -import React from 'react'; -import App from './App'; - -const container = document.getElementById('root'); -const root = createRoot(container); -root.render(); diff --git a/apps/manifest-demo/3012-rspack-js-entry-provider/src/index.js b/apps/manifest-demo/3012-rspack-js-entry-provider/src/index.js index b93c7a0268a..48342b59726 100644 --- a/apps/manifest-demo/3012-rspack-js-entry-provider/src/index.js +++ b/apps/manifest-demo/3012-rspack-js-entry-provider/src/index.js @@ -1 +1,7 @@ -import('./bootstrap'); +import React from 'react'; +import { createRoot } from 'react-dom/client'; +import App from './App'; + +const container = document.getElementById('root'); +const root = createRoot(container); +root.render(); diff --git a/apps/manifest-demo/webpack-host/src/index.tsx b/apps/manifest-demo/webpack-host/src/index.tsx index 29dcae9d86a..a2de88b3cd9 100644 --- a/apps/manifest-demo/webpack-host/src/index.tsx +++ b/apps/manifest-demo/webpack-host/src/index.tsx @@ -1,4 +1,3 @@ -// import('./bootstrap'); import React, { StrictMode, lazy } from 'react'; import { init } from '@module-federation/runtime'; import * as ReactDOM from 'react-dom/client'; diff --git a/apps/modern-component-data-fetch/host/module-federation.config.ts b/apps/modern-component-data-fetch/host/module-federation.config.ts index 528cad06fd9..3de609d5a27 100644 --- a/apps/modern-component-data-fetch/host/module-federation.config.ts +++ b/apps/modern-component-data-fetch/host/module-federation.config.ts @@ -1,6 +1,9 @@ import { createModuleFederationConfig } from '@module-federation/modern-js-v3'; export default createModuleFederationConfig({ name: 'host', + experiments: { + asyncStartup: true, + }, remotes: { remote: 'provider@http://localhost:5002/mf-manifest.json', 'provider-csr': 'provider_csr@http://localhost:5003/mf-manifest.json', diff --git a/apps/modern-component-data-fetch/provider-csr/module-federation.config.ts b/apps/modern-component-data-fetch/provider-csr/module-federation.config.ts index e8784e9e8bc..610823b574c 100644 --- a/apps/modern-component-data-fetch/provider-csr/module-federation.config.ts +++ b/apps/modern-component-data-fetch/provider-csr/module-federation.config.ts @@ -2,6 +2,9 @@ import { createModuleFederationConfig } from '@module-federation/rsbuild-plugin' export default createModuleFederationConfig({ name: 'provider_csr', + experiments: { + asyncStartup: true, + }, filename: 'remoteEntry.js', exposes: { '.': './src/index.tsx', diff --git a/apps/modern-component-data-fetch/provider/module-federation.config.ts b/apps/modern-component-data-fetch/provider/module-federation.config.ts index 4a9f4d29aad..faa9deebc38 100644 --- a/apps/modern-component-data-fetch/provider/module-federation.config.ts +++ b/apps/modern-component-data-fetch/provider/module-federation.config.ts @@ -1,6 +1,9 @@ import { createModuleFederationConfig } from '@module-federation/modern-js-v3'; export default createModuleFederationConfig({ name: 'provider', + experiments: { + asyncStartup: true, + }, filename: 'remoteEntry.js', exposes: { './BasicComponent': './src/components/BasicComponent/index.tsx', diff --git a/apps/modernjs-ssr/dynamic-nested-remote/module-federation.config.ts b/apps/modernjs-ssr/dynamic-nested-remote/module-federation.config.ts index 28bf0affee2..65600e280de 100644 --- a/apps/modernjs-ssr/dynamic-nested-remote/module-federation.config.ts +++ b/apps/modernjs-ssr/dynamic-nested-remote/module-federation.config.ts @@ -1,6 +1,9 @@ import { createModuleFederationConfig } from '@module-federation/modern-js-v3'; export default createModuleFederationConfig({ name: 'dynamic_nested_remote', + experiments: { + asyncStartup: true, + }, filename: 'remoteEntry.js', exposes: { './Content': './src/components/Content.tsx', diff --git a/apps/modernjs-ssr/dynamic-remote-new-version/module-federation.config.ts b/apps/modernjs-ssr/dynamic-remote-new-version/module-federation.config.ts index 93eff9df045..cd665e0c48b 100644 --- a/apps/modernjs-ssr/dynamic-remote-new-version/module-federation.config.ts +++ b/apps/modernjs-ssr/dynamic-remote-new-version/module-federation.config.ts @@ -1,6 +1,9 @@ import { createModuleFederationConfig } from '@module-federation/modern-js-v3'; export default createModuleFederationConfig({ name: 'dynamic_remote', + experiments: { + asyncStartup: true, + }, exposes: { '.': './src/components/Image.tsx', }, diff --git a/apps/modernjs-ssr/dynamic-remote/module-federation.config.ts b/apps/modernjs-ssr/dynamic-remote/module-federation.config.ts index ea7c86f4a5e..0498443e4dc 100644 --- a/apps/modernjs-ssr/dynamic-remote/module-federation.config.ts +++ b/apps/modernjs-ssr/dynamic-remote/module-federation.config.ts @@ -1,6 +1,9 @@ import { createModuleFederationConfig } from '@module-federation/modern-js-v3'; export default createModuleFederationConfig({ name: 'dynamic_remote', + experiments: { + asyncStartup: true, + }, filename: 'remoteEntry.js', exposes: { '.': './src/Index.tsx', diff --git a/apps/modernjs-ssr/host/module-federation.config.ts b/apps/modernjs-ssr/host/module-federation.config.ts index c79ece93344..7b8516fbc3c 100644 --- a/apps/modernjs-ssr/host/module-federation.config.ts +++ b/apps/modernjs-ssr/host/module-federation.config.ts @@ -1,6 +1,9 @@ import { createModuleFederationConfig } from '@module-federation/modern-js-v3'; export default createModuleFederationConfig({ name: 'host', + experiments: { + asyncStartup: true, + }, remotes: { remote: 'remote@http://localhost:3051/static/mf-manifest.json', nested_remote: 'nested_remote@http://localhost:3052/mf-manifest.json', diff --git a/apps/modernjs-ssr/nested-remote/module-federation.config.ts b/apps/modernjs-ssr/nested-remote/module-federation.config.ts index b1b507b6a9c..14ad87ac4a3 100644 --- a/apps/modernjs-ssr/nested-remote/module-federation.config.ts +++ b/apps/modernjs-ssr/nested-remote/module-federation.config.ts @@ -1,6 +1,9 @@ import { createModuleFederationConfig } from '@module-federation/modern-js-v3'; export default createModuleFederationConfig({ name: 'nested_remote', + experiments: { + asyncStartup: true, + }, filename: 'remoteEntry.js', exposes: { './Content': './src/components/Content.tsx', diff --git a/apps/modernjs-ssr/remote-new-version/module-federation.config.ts b/apps/modernjs-ssr/remote-new-version/module-federation.config.ts index 68fe3174f80..6a435aadd2b 100644 --- a/apps/modernjs-ssr/remote-new-version/module-federation.config.ts +++ b/apps/modernjs-ssr/remote-new-version/module-federation.config.ts @@ -1,6 +1,9 @@ import { createModuleFederationConfig } from '@module-federation/modern-js-v3'; export default createModuleFederationConfig({ name: 'remote', + experiments: { + asyncStartup: true, + }, exposes: { './Image': './src/components/Image.tsx', }, diff --git a/apps/modernjs-ssr/remote/module-federation.config.ts b/apps/modernjs-ssr/remote/module-federation.config.ts index c7e31042400..70440d77c4d 100644 --- a/apps/modernjs-ssr/remote/module-federation.config.ts +++ b/apps/modernjs-ssr/remote/module-federation.config.ts @@ -1,6 +1,9 @@ import { createModuleFederationConfig } from '@module-federation/modern-js-v3'; export default createModuleFederationConfig({ name: 'remote', + experiments: { + asyncStartup: true, + }, manifest: { filePath: 'static', }, diff --git a/apps/node-dynamic-remote-new-version/webpack.config.js b/apps/node-dynamic-remote-new-version/webpack.config.js index 65367d86846..112000aa414 100644 --- a/apps/node-dynamic-remote-new-version/webpack.config.js +++ b/apps/node-dynamic-remote-new-version/webpack.config.js @@ -70,6 +70,9 @@ module.exports = (_env, argv = {}) => { axios: { singleton: true }, lodash: { singleton: true }, }, + experiments: { + asyncStartup: true, + }, }), ], watchOptions: { diff --git a/apps/node-dynamic-remote/webpack.config.js b/apps/node-dynamic-remote/webpack.config.js index 65367d86846..112000aa414 100644 --- a/apps/node-dynamic-remote/webpack.config.js +++ b/apps/node-dynamic-remote/webpack.config.js @@ -70,6 +70,9 @@ module.exports = (_env, argv = {}) => { axios: { singleton: true }, lodash: { singleton: true }, }, + experiments: { + asyncStartup: true, + }, }), ], watchOptions: { diff --git a/apps/node-local-remote/webpack.config.js b/apps/node-local-remote/webpack.config.js index 5a07162ea7e..8d2f0f2ddaa 100644 --- a/apps/node-local-remote/webpack.config.js +++ b/apps/node-local-remote/webpack.config.js @@ -68,6 +68,9 @@ module.exports = (_env, argv = {}) => { exposes: { './test': './src/expose.js', }, + experiments: { + asyncStartup: true, + }, }), ], watchOptions: { diff --git a/apps/node-remote/module-federation.config.ts b/apps/node-remote/module-federation.config.ts index e99b325d7c5..1ac7451238a 100644 --- a/apps/node-remote/module-federation.config.ts +++ b/apps/node-remote/module-federation.config.ts @@ -2,6 +2,9 @@ import { createModuleFederationConfig } from '@module-federation/rsbuild-plugin' export default createModuleFederationConfig({ name: 'node_remote', + experiments: { + asyncStartup: true, + }, filename: 'remoteEntry.js', exposes: { './test': './src/expose.js', diff --git a/apps/node-remote/src/bootstrap.js b/apps/node-remote/src/bootstrap.js deleted file mode 100644 index 881617ee627..00000000000 --- a/apps/node-remote/src/bootstrap.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * This is not a production server yet! - * This is only a minimal backend to get started. - */ - -import express from 'express'; -import * as path from 'path'; -// import node_local_remote from 'node_local_remote/test'; -console.log('loading test'); - -// console.log('\x1b[32m%s\x1b[0m', node_local_remote); - -const app = express(); - -app.use('/assets', express.static(path.join(__dirname, 'assets'))); - -app.get('/api', async (req, res) => { - console.log('will send'); - res.send({ - message: 'Welcome to node-host!', - }); -}); - -const port = process.env.PORT || 3333; -const server = app.listen(port, () => { - console.log(`Listening at http://localhost:${port}/api`); -}); -server.on('error', console.error); diff --git a/apps/node-remote/src/main.js b/apps/node-remote/src/main.js index b93c7a0268a..881617ee627 100644 --- a/apps/node-remote/src/main.js +++ b/apps/node-remote/src/main.js @@ -1 +1,28 @@ -import('./bootstrap'); +/** + * This is not a production server yet! + * This is only a minimal backend to get started. + */ + +import express from 'express'; +import * as path from 'path'; +// import node_local_remote from 'node_local_remote/test'; +console.log('loading test'); + +// console.log('\x1b[32m%s\x1b[0m', node_local_remote); + +const app = express(); + +app.use('/assets', express.static(path.join(__dirname, 'assets'))); + +app.get('/api', async (req, res) => { + console.log('will send'); + res.send({ + message: 'Welcome to node-host!', + }); +}); + +const port = process.env.PORT || 3333; +const server = app.listen(port, () => { + console.log(`Listening at http://localhost:${port}/api`); +}); +server.on('error', console.error); diff --git a/apps/node-remote/webpack.config.js b/apps/node-remote/webpack.config.js index 4b4c7082486..85b8eeeb345 100644 --- a/apps/node-remote/webpack.config.js +++ b/apps/node-remote/webpack.config.js @@ -67,6 +67,9 @@ module.exports = (_env, argv = {}) => { exposes: { './test': './src/expose.js', }, + experiments: { + asyncStartup: true, + }, }), ], watchOptions: { diff --git a/apps/react-ts-host/src/bootstrap.tsx b/apps/react-ts-host/src/bootstrap.tsx deleted file mode 100644 index c9fb3766a3a..00000000000 --- a/apps/react-ts-host/src/bootstrap.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { StrictMode } from 'react'; -import * as ReactDOM from 'react-dom/client'; -import { BrowserRouter } from 'react-router-dom'; - -import App from './app/App'; - -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement, -); -root.render( - - - - - , -); diff --git a/apps/react-ts-host/src/main.ts b/apps/react-ts-host/src/main.ts index b93c7a0268a..554c91ed427 100644 --- a/apps/react-ts-host/src/main.ts +++ b/apps/react-ts-host/src/main.ts @@ -1 +1,19 @@ -import('./bootstrap'); +import React, { StrictMode } from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { BrowserRouter } from 'react-router-dom'; + +import App from './app/App'; + +const rootElement = document.getElementById('root'); +if (!rootElement) { + throw new Error('Failed to find the root element'); +} + +const root = ReactDOM.createRoot(rootElement); +root.render( + React.createElement( + StrictMode, + null, + React.createElement(BrowserRouter, null, React.createElement(App)), + ), +); diff --git a/apps/react-ts-host/webpack.config.js b/apps/react-ts-host/webpack.config.js index 71cfeee713f..58d8d96701e 100644 --- a/apps/react-ts-host/webpack.config.js +++ b/apps/react-ts-host/webpack.config.js @@ -86,6 +86,9 @@ module.exports = (_env, argv = {}) => { new ModuleFederationPlugin({ name: 'react_ts_host', filename: 'remoteEntry.js', + experiments: { + asyncStartup: true, + }, remotes: { react_ts_nested_remote: 'react_ts_nested_remote@http://localhost:3005/mf-manifest.json', diff --git a/apps/react-ts-nested-remote/src/bootstrap.tsx b/apps/react-ts-nested-remote/src/bootstrap.tsx deleted file mode 100644 index cf468655e23..00000000000 --- a/apps/react-ts-nested-remote/src/bootstrap.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { StrictMode } from 'react'; -import * as ReactDOM from 'react-dom/client'; - -import App from './app/App'; - -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement, -); -root.render( - - - , -); diff --git a/apps/react-ts-nested-remote/src/main.ts b/apps/react-ts-nested-remote/src/main.ts index b93c7a0268a..378023c0d6f 100644 --- a/apps/react-ts-nested-remote/src/main.ts +++ b/apps/react-ts-nested-remote/src/main.ts @@ -1 +1,12 @@ -import('./bootstrap'); +import React, { StrictMode } from 'react'; +import * as ReactDOM from 'react-dom/client'; + +import App from './app/App'; + +const rootElement = document.getElementById('root'); +if (!rootElement) { + throw new Error('Failed to find the root element'); +} + +const root = ReactDOM.createRoot(rootElement); +root.render(React.createElement(StrictMode, null, React.createElement(App))); diff --git a/apps/react-ts-nested-remote/webpack.config.js b/apps/react-ts-nested-remote/webpack.config.js index bbae55f9b46..97a87bf1af4 100644 --- a/apps/react-ts-nested-remote/webpack.config.js +++ b/apps/react-ts-nested-remote/webpack.config.js @@ -86,6 +86,9 @@ module.exports = (_env, argv = {}) => { new ModuleFederationPlugin({ name: 'react_ts_nested_remote', filename: 'remoteEntry.js', + experiments: { + asyncStartup: true, + }, exposes: { './Module': './src/app/nx-welcome.tsx', './utils': './src/app/utils.ts', diff --git a/apps/react-ts-remote/rspack.config.js b/apps/react-ts-remote/rspack.config.js index 6a78a1aed06..d6cbc7c19f5 100644 --- a/apps/react-ts-remote/rspack.config.js +++ b/apps/react-ts-remote/rspack.config.js @@ -97,6 +97,9 @@ module.exports = (_env, argv = {}) => { new ModuleFederationPlugin({ name: 'react_ts_remote', filename: 'remoteEntry.js', + experiments: { + asyncStartup: true, + }, exposes: { './Module': './src/app/nx-welcome.tsx', }, diff --git a/apps/react-ts-remote/src/bootstrap.tsx b/apps/react-ts-remote/src/bootstrap.tsx deleted file mode 100644 index cf468655e23..00000000000 --- a/apps/react-ts-remote/src/bootstrap.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { StrictMode } from 'react'; -import * as ReactDOM from 'react-dom/client'; - -import App from './app/App'; - -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement, -); -root.render( - - - , -); diff --git a/apps/react-ts-remote/src/main.ts b/apps/react-ts-remote/src/main.ts index b93c7a0268a..378023c0d6f 100644 --- a/apps/react-ts-remote/src/main.ts +++ b/apps/react-ts-remote/src/main.ts @@ -1 +1,12 @@ -import('./bootstrap'); +import React, { StrictMode } from 'react'; +import * as ReactDOM from 'react-dom/client'; + +import App from './app/App'; + +const rootElement = document.getElementById('root'); +if (!rootElement) { + throw new Error('Failed to find the root element'); +} + +const root = ReactDOM.createRoot(rootElement); +root.render(React.createElement(StrictMode, null, React.createElement(App))); diff --git a/apps/reactRemoteUI/module-federation.config.js b/apps/reactRemoteUI/module-federation.config.js index 7da393099dc..6763d07345a 100644 --- a/apps/reactRemoteUI/module-federation.config.js +++ b/apps/reactRemoteUI/module-federation.config.js @@ -1,6 +1,9 @@ module.exports = { name: 'reactRemoteUI', filename: 'remoteEntry.js', + experiments: { + asyncStartup: true, + }, exposes: { './Button': './src/Button', }, diff --git a/apps/reactRemoteUI/src/bootstrap.tsx b/apps/reactRemoteUI/src/bootstrap.tsx deleted file mode 100644 index aec633b2033..00000000000 --- a/apps/reactRemoteUI/src/bootstrap.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { StrictMode } from 'react'; -import * as ReactDOM from 'react-dom/client'; - -import Button from './Button'; - -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement, -); -root.render( - -
- UI Library Button: - -
-
, -); diff --git a/apps/reactRemoteUI/src/main.ts b/apps/reactRemoteUI/src/main.ts index b93c7a0268a..73066c5bda0 100644 --- a/apps/reactRemoteUI/src/main.ts +++ b/apps/reactRemoteUI/src/main.ts @@ -1 +1,23 @@ -import('./bootstrap'); +import React, { StrictMode } from 'react'; +import * as ReactDOM from 'react-dom/client'; + +import Button from './Button'; + +const rootElement = document.getElementById('root'); +if (!rootElement) { + throw new Error('Failed to find the root element'); +} + +const root = ReactDOM.createRoot(rootElement); +root.render( + React.createElement( + StrictMode, + null, + React.createElement( + 'div', + null, + 'UI Library Button:', + React.createElement(Button, null, 'Test Button'), + ), + ), +); diff --git a/apps/reactStorybook/module-federation.config.js b/apps/reactStorybook/module-federation.config.js index 9de6b4d6504..ceca1379186 100644 --- a/apps/reactStorybook/module-federation.config.js +++ b/apps/reactStorybook/module-federation.config.js @@ -1,4 +1,7 @@ module.exports = { name: 'reactStorybook', remotes: ['reactRemoteUI'], + experiments: { + asyncStartup: true, + }, }; diff --git a/apps/reactStorybook/src/bootstrap.tsx b/apps/reactStorybook/src/bootstrap.tsx deleted file mode 100644 index 9124761f39e..00000000000 --- a/apps/reactStorybook/src/bootstrap.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { StrictMode } from 'react'; -import * as ReactDOM from 'react-dom/client'; -import { BrowserRouter } from 'react-router-dom'; - -import App from './app/app'; - -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement, -); -root.render( - - - - - , -); diff --git a/apps/reactStorybook/src/main.ts b/apps/reactStorybook/src/main.ts index b93c7a0268a..2f0f10e9a9d 100644 --- a/apps/reactStorybook/src/main.ts +++ b/apps/reactStorybook/src/main.ts @@ -1 +1,19 @@ -import('./bootstrap'); +import React, { StrictMode } from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { BrowserRouter } from 'react-router-dom'; + +import App from './app/app'; + +const rootElement = document.getElementById('root'); +if (!rootElement) { + throw new Error('Failed to find the root element'); +} + +const root = ReactDOM.createRoot(rootElement); +root.render( + React.createElement( + StrictMode, + null, + React.createElement(BrowserRouter, null, React.createElement(App)), + ), +); diff --git a/apps/router-demo/router-host-2000/rsbuild.config.ts b/apps/router-demo/router-host-2000/rsbuild.config.ts index d8270305fad..11564741b47 100644 --- a/apps/router-demo/router-host-2000/rsbuild.config.ts +++ b/apps/router-demo/router-host-2000/rsbuild.config.ts @@ -18,6 +18,9 @@ export default defineConfig({ pluginReact(), pluginModuleFederation({ name: 'federation_consumer', + experiments: { + asyncStartup: true, + }, shareStrategy: 'loaded-first', remotes: { remote1: 'remote1@http://localhost:2001/mf-manifest.json', diff --git a/apps/router-demo/router-host-2000/src/bootstrap.tsx b/apps/router-demo/router-host-2000/src/bootstrap.tsx deleted file mode 100644 index 98840e0d32a..00000000000 --- a/apps/router-demo/router-host-2000/src/bootstrap.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import { BrowserRouter } from 'react-router-dom'; -import App from './App'; -import './index.css'; - -const root = ReactDOM.createRoot(document.getElementById('root')!); -root.render( - - - - - , -); diff --git a/apps/router-demo/router-host-2000/src/index.tsx b/apps/router-demo/router-host-2000/src/index.tsx index b93c7a0268a..98840e0d32a 100644 --- a/apps/router-demo/router-host-2000/src/index.tsx +++ b/apps/router-demo/router-host-2000/src/index.tsx @@ -1 +1,14 @@ -import('./bootstrap'); +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import { BrowserRouter } from 'react-router-dom'; +import App from './App'; +import './index.css'; + +const root = ReactDOM.createRoot(document.getElementById('root')!); +root.render( + + + + + , +); diff --git a/apps/router-demo/router-host-v5-2200/rsbuild.config.ts b/apps/router-demo/router-host-v5-2200/rsbuild.config.ts index 0c2369180bd..0dc5ab98935 100644 --- a/apps/router-demo/router-host-v5-2200/rsbuild.config.ts +++ b/apps/router-demo/router-host-v5-2200/rsbuild.config.ts @@ -22,6 +22,9 @@ export default defineConfig({ pluginReact(), pluginModuleFederation({ name: 'federation_consumer2', + experiments: { + asyncStartup: true, + }, remotes: { remote1: 'remote1@http://localhost:2001/mf-manifest.json', remote2: 'remote2@http://localhost:2002/mf-manifest.json', diff --git a/apps/router-demo/router-host-v5-2200/src/bootstrap.tsx b/apps/router-demo/router-host-v5-2200/src/bootstrap.tsx deleted file mode 100644 index 405a3878330..00000000000 --- a/apps/router-demo/router-host-v5-2200/src/bootstrap.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import App from './App'; - -const rootNode = document.getElementById('root'); -ReactDOM.render(, rootNode); diff --git a/apps/router-demo/router-host-v5-2200/src/index.tsx b/apps/router-demo/router-host-v5-2200/src/index.tsx index b93c7a0268a..405a3878330 100644 --- a/apps/router-demo/router-host-v5-2200/src/index.tsx +++ b/apps/router-demo/router-host-v5-2200/src/index.tsx @@ -1 +1,6 @@ -import('./bootstrap'); +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; + +const rootNode = document.getElementById('root'); +ReactDOM.render(, rootNode); diff --git a/apps/router-demo/router-host-vue3-2100/rsbuild.config.ts b/apps/router-demo/router-host-vue3-2100/rsbuild.config.ts index 8347e1da04d..8cf5f4dee50 100644 --- a/apps/router-demo/router-host-vue3-2100/rsbuild.config.ts +++ b/apps/router-demo/router-host-vue3-2100/rsbuild.config.ts @@ -23,6 +23,9 @@ export default defineConfig({ pluginVue(), pluginModuleFederation({ name: 'host2', + experiments: { + asyncStartup: true, + }, remotes: { remote1: 'remote1@http://localhost:2001/mf-manifest.json', }, diff --git a/apps/router-demo/router-host-vue3-2100/src/bootstrap.ts b/apps/router-demo/router-host-vue3-2100/src/bootstrap.ts deleted file mode 100644 index 041216f6003..00000000000 --- a/apps/router-demo/router-host-vue3-2100/src/bootstrap.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { createApp } from 'vue'; -import App from './App.vue'; -import './index.css'; -import router from './router'; - -const app = createApp(App); - -app.use(router); - -app.mount('#root'); diff --git a/apps/router-demo/router-host-vue3-2100/src/index.ts b/apps/router-demo/router-host-vue3-2100/src/index.ts index b93c7a0268a..041216f6003 100644 --- a/apps/router-demo/router-host-vue3-2100/src/index.ts +++ b/apps/router-demo/router-host-vue3-2100/src/index.ts @@ -1 +1,10 @@ -import('./bootstrap'); +import { createApp } from 'vue'; +import App from './App.vue'; +import './index.css'; +import router from './router'; + +const app = createApp(App); + +app.use(router); + +app.mount('#root'); diff --git a/apps/router-demo/router-remote1-2001/rsbuild.config.ts b/apps/router-demo/router-remote1-2001/rsbuild.config.ts index 0583fbeac60..d2682d68a0c 100644 --- a/apps/router-demo/router-remote1-2001/rsbuild.config.ts +++ b/apps/router-demo/router-remote1-2001/rsbuild.config.ts @@ -36,6 +36,9 @@ export default defineConfig({ pluginReact(), pluginModuleFederation({ name: 'remote1', + experiments: { + asyncStartup: true, + }, runtimePlugins: [ require.resolve('@module-federation/bridge-react/plugin'), ], diff --git a/apps/router-demo/router-remote1-2001/src/bootstrap.tsx b/apps/router-demo/router-remote1-2001/src/bootstrap.tsx deleted file mode 100644 index f4daea921d0..00000000000 --- a/apps/router-demo/router-remote1-2001/src/bootstrap.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import App from './App'; - -const rootNode = document.getElementById('root'); -ReactDOM.render(, rootNode); diff --git a/apps/router-demo/router-remote1-2001/src/index.tsx b/apps/router-demo/router-remote1-2001/src/index.tsx index aeb7d2b85c2..3d423d1d73a 100644 --- a/apps/router-demo/router-remote1-2001/src/index.tsx +++ b/apps/router-demo/router-remote1-2001/src/index.tsx @@ -1,4 +1,9 @@ -import('./bootstrap'); +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; + +const rootNode = document.getElementById('root'); +ReactDOM.render(, rootNode); declare module '*.css' { const classex: any; diff --git a/apps/router-demo/router-remote2-2002/rsbuild.config.ts b/apps/router-demo/router-remote2-2002/rsbuild.config.ts index 137aa8d9d8b..ea9fc5202c8 100644 --- a/apps/router-demo/router-remote2-2002/rsbuild.config.ts +++ b/apps/router-demo/router-remote2-2002/rsbuild.config.ts @@ -43,6 +43,9 @@ export default defineConfig({ pluginReact(), pluginModuleFederation({ name: 'remote2', + experiments: { + asyncStartup: true, + }, exposes: { './button': './src/button.tsx', './export-app': './src/export-App.tsx', diff --git a/apps/router-demo/router-remote2-2002/src/bootstrap.tsx b/apps/router-demo/router-remote2-2002/src/bootstrap.tsx deleted file mode 100644 index 2784a44dbd0..00000000000 --- a/apps/router-demo/router-remote2-2002/src/bootstrap.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './App.jsx'; - -//@ts-ignore -const root = createRoot(document.getElementById('root')!); -root.render( - - - , -); diff --git a/apps/router-demo/router-remote2-2002/src/index.tsx b/apps/router-demo/router-remote2-2002/src/index.tsx index b93c7a0268a..2784a44dbd0 100644 --- a/apps/router-demo/router-remote2-2002/src/index.tsx +++ b/apps/router-demo/router-remote2-2002/src/index.tsx @@ -1 +1,11 @@ -import('./bootstrap'); +import React from 'react'; +import { createRoot } from 'react-dom/client'; +import App from './App.jsx'; + +//@ts-ignore +const root = createRoot(document.getElementById('root')!); +root.render( + + + , +); diff --git a/apps/router-demo/router-remote3-2003/rsbuild.config.ts b/apps/router-demo/router-remote3-2003/rsbuild.config.ts index 0e93678627a..91a19c69254 100644 --- a/apps/router-demo/router-remote3-2003/rsbuild.config.ts +++ b/apps/router-demo/router-remote3-2003/rsbuild.config.ts @@ -27,6 +27,9 @@ export default defineConfig({ pluginVue(), pluginModuleFederation({ name: 'remote3', + experiments: { + asyncStartup: true, + }, exposes: { './export-app': './src/export-app.ts', }, diff --git a/apps/router-demo/router-remote3-2003/src/bootstrap.ts b/apps/router-demo/router-remote3-2003/src/bootstrap.ts deleted file mode 100644 index 041216f6003..00000000000 --- a/apps/router-demo/router-remote3-2003/src/bootstrap.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { createApp } from 'vue'; -import App from './App.vue'; -import './index.css'; -import router from './router'; - -const app = createApp(App); - -app.use(router); - -app.mount('#root'); diff --git a/apps/router-demo/router-remote3-2003/src/index.ts b/apps/router-demo/router-remote3-2003/src/index.ts index b93c7a0268a..041216f6003 100644 --- a/apps/router-demo/router-remote3-2003/src/index.ts +++ b/apps/router-demo/router-remote3-2003/src/index.ts @@ -1 +1,10 @@ -import('./bootstrap'); +import { createApp } from 'vue'; +import App from './App.vue'; +import './index.css'; +import router from './router'; + +const app = createApp(App); + +app.use(router); + +app.mount('#root'); diff --git a/apps/router-demo/router-remote4-2004/rsbuild.config.ts b/apps/router-demo/router-remote4-2004/rsbuild.config.ts index fad73c841f7..03e2d81d4ef 100644 --- a/apps/router-demo/router-remote4-2004/rsbuild.config.ts +++ b/apps/router-demo/router-remote4-2004/rsbuild.config.ts @@ -46,6 +46,9 @@ export default defineConfig({ pluginReact(), pluginModuleFederation({ name: 'remote4', + experiments: { + asyncStartup: true, + }, exposes: { './export-app': './src/export-App.tsx', }, diff --git a/apps/router-demo/router-remote4-2004/src/bootstrap.tsx b/apps/router-demo/router-remote4-2004/src/bootstrap.tsx deleted file mode 100644 index dffc61b3dca..00000000000 --- a/apps/router-demo/router-remote4-2004/src/bootstrap.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './App'; - -//@ts-ignore -const root = createRoot(document.getElementById('root')!); -root.render( - - - , -); diff --git a/apps/router-demo/router-remote4-2004/src/index.tsx b/apps/router-demo/router-remote4-2004/src/index.tsx index b93c7a0268a..dffc61b3dca 100644 --- a/apps/router-demo/router-remote4-2004/src/index.tsx +++ b/apps/router-demo/router-remote4-2004/src/index.tsx @@ -1 +1,11 @@ -import('./bootstrap'); +import React from 'react'; +import { createRoot } from 'react-dom/client'; +import App from './App'; + +//@ts-ignore +const root = createRoot(document.getElementById('root')!); +root.render( + + + , +); diff --git a/apps/router-demo/router-remote5-2005/rsbuild.config.ts b/apps/router-demo/router-remote5-2005/rsbuild.config.ts index 31485e5ae1b..4b09a54a26d 100644 --- a/apps/router-demo/router-remote5-2005/rsbuild.config.ts +++ b/apps/router-demo/router-remote5-2005/rsbuild.config.ts @@ -30,6 +30,9 @@ export default defineConfig({ pluginReact(), pluginModuleFederation({ name: 'remote5', + experiments: { + asyncStartup: true, + }, exposes: { './export-app': './src/export-App.tsx', }, diff --git a/apps/router-demo/router-remote5-2005/src/bootstrap.tsx b/apps/router-demo/router-remote5-2005/src/bootstrap.tsx deleted file mode 100644 index 9932ca8423d..00000000000 --- a/apps/router-demo/router-remote5-2005/src/bootstrap.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './App'; - -const root = createRoot(document.getElementById('root')!); -root.render( - - - , -); diff --git a/apps/router-demo/router-remote5-2005/src/index.tsx b/apps/router-demo/router-remote5-2005/src/index.tsx index b93c7a0268a..9932ca8423d 100644 --- a/apps/router-demo/router-remote5-2005/src/index.tsx +++ b/apps/router-demo/router-remote5-2005/src/index.tsx @@ -1 +1,10 @@ -import('./bootstrap'); +import React from 'react'; +import { createRoot } from 'react-dom/client'; +import App from './App'; + +const root = createRoot(document.getElementById('root')!); +root.render( + + + , +); diff --git a/apps/router-demo/router-remote6-2006/rsbuild.config.ts b/apps/router-demo/router-remote6-2006/rsbuild.config.ts index bcca4a6ee63..c500e3c6b60 100644 --- a/apps/router-demo/router-remote6-2006/rsbuild.config.ts +++ b/apps/router-demo/router-remote6-2006/rsbuild.config.ts @@ -25,6 +25,9 @@ export default defineConfig({ pluginReact(), pluginModuleFederation({ name: 'remote6', + experiments: { + asyncStartup: true, + }, exposes: { './button': './src/button.tsx', './export-app': './src/export-App.tsx', diff --git a/apps/router-demo/router-remote6-2006/src/bootstrap.tsx b/apps/router-demo/router-remote6-2006/src/bootstrap.tsx deleted file mode 100644 index 59f05b52b00..00000000000 --- a/apps/router-demo/router-remote6-2006/src/bootstrap.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { StrictMode } from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './App'; - -const rootElement = document.getElementById('root'); -if (!rootElement) { - throw new Error('Failed to find the root element'); -} - -const root = createRoot(rootElement); - -root.render( - - - , -); diff --git a/apps/router-demo/router-remote6-2006/src/index.tsx b/apps/router-demo/router-remote6-2006/src/index.tsx index b93c7a0268a..59f05b52b00 100644 --- a/apps/router-demo/router-remote6-2006/src/index.tsx +++ b/apps/router-demo/router-remote6-2006/src/index.tsx @@ -1 +1,16 @@ -import('./bootstrap'); +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import App from './App'; + +const rootElement = document.getElementById('root'); +if (!rootElement) { + throw new Error('Failed to find the root element'); +} + +const root = createRoot(rootElement); + +root.render( + + + , +); diff --git a/apps/rslib-module/rslib.config.ts b/apps/rslib-module/rslib.config.ts index 5e22e8f0955..e29e86783b1 100644 --- a/apps/rslib-module/rslib.config.ts +++ b/apps/rslib-module/rslib.config.ts @@ -45,6 +45,9 @@ export default defineConfig({ pluginReact(), pluginModuleFederation({ name: 'rslib_provider', + experiments: { + asyncStartup: true, + }, exposes: { '.': './src/index.tsx', }, diff --git a/apps/runtime-demo/3007-runtime-remote/webpack.config.js b/apps/runtime-demo/3007-runtime-remote/webpack.config.js index c7aa170ed70..885c73b422e 100644 --- a/apps/runtime-demo/3007-runtime-remote/webpack.config.js +++ b/apps/runtime-demo/3007-runtime-remote/webpack.config.js @@ -120,6 +120,9 @@ module.exports = (_env, argv = {}) => { }, }, shareStrategy: 'loaded-first', + experiments: { + asyncStartup: true, + }, dev: { disableLiveReload: true, }, diff --git a/apps/runtime-demo/3008-runtime-remote/rsbuild.config.mjs b/apps/runtime-demo/3008-runtime-remote/rsbuild.config.mjs index 912f8ff3e8d..ce200611289 100644 --- a/apps/runtime-demo/3008-runtime-remote/rsbuild.config.mjs +++ b/apps/runtime-demo/3008-runtime-remote/rsbuild.config.mjs @@ -16,6 +16,9 @@ export default defineConfig({ appendPlugins([ new ModuleFederationPlugin({ name: 'runtime_remote3', + experiments: { + asyncStartup: true, + }, exposes: { './button': './src/Button.tsx', }, diff --git a/apps/runtime-demo/3008-runtime-remote/src/bootstrap.jsx b/apps/runtime-demo/3008-runtime-remote/src/bootstrap.jsx deleted file mode 100644 index 65a8dbf40a2..00000000000 --- a/apps/runtime-demo/3008-runtime-remote/src/bootstrap.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import App from './App'; - -const root = ReactDOM.createRoot(document.getElementById('root')); -root.render( - - - , -); diff --git a/apps/runtime-demo/3008-runtime-remote/src/index.jsx b/apps/runtime-demo/3008-runtime-remote/src/index.jsx index b93c7a0268a..65a8dbf40a2 100644 --- a/apps/runtime-demo/3008-runtime-remote/src/index.jsx +++ b/apps/runtime-demo/3008-runtime-remote/src/index.jsx @@ -1 +1,10 @@ -import('./bootstrap'); +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; + +const root = ReactDOM.createRoot(document.getElementById('root')); +root.render( + + + , +); diff --git a/apps/shared-tree-shaking/no-server/host/module-federation.config.ts b/apps/shared-tree-shaking/no-server/host/module-federation.config.ts index b365ea1dfd8..dc2f32eb68a 100644 --- a/apps/shared-tree-shaking/no-server/host/module-federation.config.ts +++ b/apps/shared-tree-shaking/no-server/host/module-federation.config.ts @@ -2,6 +2,9 @@ import { createModuleFederationConfig } from '@module-federation/enhanced'; export default createModuleFederationConfig({ name: 'mf_host', + experiments: { + asyncStartup: true, + }, remotes: { mf_remote: 'provider@http://localhost:3002/mf-manifest.json', }, diff --git a/apps/shared-tree-shaking/no-server/provider/module-federation.config.ts b/apps/shared-tree-shaking/no-server/provider/module-federation.config.ts index 2d70dc8dedb..57888ac3c0f 100644 --- a/apps/shared-tree-shaking/no-server/provider/module-federation.config.ts +++ b/apps/shared-tree-shaking/no-server/provider/module-federation.config.ts @@ -2,6 +2,9 @@ import { createModuleFederationConfig } from '@module-federation/enhanced'; export default createModuleFederationConfig({ name: 'provider', + experiments: { + asyncStartup: true, + }, filename: 'remoteEntry.js', exposes: { './App': './src/routes/page.tsx', diff --git a/apps/shared-tree-shaking/with-server/host/module-federation.config.ts b/apps/shared-tree-shaking/with-server/host/module-federation.config.ts index fe383f9730e..b1c62074340 100644 --- a/apps/shared-tree-shaking/with-server/host/module-federation.config.ts +++ b/apps/shared-tree-shaking/with-server/host/module-federation.config.ts @@ -7,6 +7,9 @@ const isSecondarySharedTreeShaking = Boolean( export default createModuleFederationConfig({ name: 'mf_host', + experiments: { + asyncStartup: true, + }, remotes: { mf_remote: 'provider@http://localhost:3002/mf-manifest.json', }, diff --git a/apps/shared-tree-shaking/with-server/provider/module-federation.config.ts b/apps/shared-tree-shaking/with-server/provider/module-federation.config.ts index 47b2a7a4756..35624427600 100644 --- a/apps/shared-tree-shaking/with-server/provider/module-federation.config.ts +++ b/apps/shared-tree-shaking/with-server/provider/module-federation.config.ts @@ -6,6 +6,9 @@ const isSecondarySharedTreeShaking = Boolean( export default createModuleFederationConfig({ name: 'provider', + experiments: { + asyncStartup: true, + }, filename: 'remoteEntry.js', exposes: { './App': './src/routes/page.tsx', diff --git a/apps/website-new/module-federation.config.ts b/apps/website-new/module-federation.config.ts index d61a6eb7981..e182beb221c 100644 --- a/apps/website-new/module-federation.config.ts +++ b/apps/website-new/module-federation.config.ts @@ -73,6 +73,9 @@ const exposes = { export default createModuleFederationConfig({ filename: 'remoteEntry.js', name: 'mf_doc', + experiments: { + asyncStartup: true, + }, exposes: Object.entries(exposes).reduce((acc, [key, value]) => { LANGUAGES.forEach((lang) => { acc[key.replace(LANGUAGE, lang)] = path.join( diff --git a/packages/create-module-federation/templates/consumer-modern-ts/module-federation.config.ts.handlebars b/packages/create-module-federation/templates/consumer-modern-ts/module-federation.config.ts.handlebars index 5e9766fb489..8b2f28b230a 100644 --- a/packages/create-module-federation/templates/consumer-modern-ts/module-federation.config.ts.handlebars +++ b/packages/create-module-federation/templates/consumer-modern-ts/module-federation.config.ts.handlebars @@ -5,6 +5,9 @@ export default createModuleFederationConfig({ remotes: { 'provider': 'rslib_provider@https://unpkg.com/module-federation-rslib-provider@latest/dist/mf/mf-manifest.json', }, + experiments: { + asyncStartup: true, + }, shared: { react: { singleton: true }, 'react-dom': { singleton: true }, diff --git a/packages/create-module-federation/templates/consumer-rsbuild-ts/module-federation.config.ts.handlebars b/packages/create-module-federation/templates/consumer-rsbuild-ts/module-federation.config.ts.handlebars index 971610a9d5e..32eb105e061 100644 --- a/packages/create-module-federation/templates/consumer-rsbuild-ts/module-federation.config.ts.handlebars +++ b/packages/create-module-federation/templates/consumer-rsbuild-ts/module-federation.config.ts.handlebars @@ -5,6 +5,9 @@ export default createModuleFederationConfig({ remotes: { 'provider': 'rslib_provider@https://unpkg.com/module-federation-rslib-provider@latest/dist/mf/mf-manifest.json', }, + experiments: { + asyncStartup: true, + }, shareStrategy: 'loaded-first', shared: { react: { singleton: true }, diff --git a/packages/create-module-federation/templates/lib-common/module-federation.config.ts.handlebars b/packages/create-module-federation/templates/lib-common/module-federation.config.ts.handlebars index acf4fd99828..06d74214640 100644 --- a/packages/create-module-federation/templates/lib-common/module-federation.config.ts.handlebars +++ b/packages/create-module-federation/templates/lib-common/module-federation.config.ts.handlebars @@ -6,6 +6,9 @@ export default createModuleFederationConfig({ exposes: { '.': './src/index.tsx', }, + experiments: { + asyncStartup: true, + }, shared: { react: { singleton: true, diff --git a/packages/create-module-federation/templates/provider-modern-ts/module-federation.config.ts.handlebars b/packages/create-module-federation/templates/provider-modern-ts/module-federation.config.ts.handlebars index 549cc99a776..9994697d2da 100644 --- a/packages/create-module-federation/templates/provider-modern-ts/module-federation.config.ts.handlebars +++ b/packages/create-module-federation/templates/provider-modern-ts/module-federation.config.ts.handlebars @@ -5,6 +5,9 @@ export default createModuleFederationConfig({ exposes: { '.': './src/components/ProviderComponent.tsx', }, + experiments: { + asyncStartup: true, + }, shared: { react: { singleton: true }, 'react-dom': { singleton: true }, diff --git a/packages/create-module-federation/templates/provider-rsbuild-ts/module-federation.config.ts.handlebars b/packages/create-module-federation/templates/provider-rsbuild-ts/module-federation.config.ts.handlebars index ded744910c7..15aa452dbe1 100644 --- a/packages/create-module-federation/templates/provider-rsbuild-ts/module-federation.config.ts.handlebars +++ b/packages/create-module-federation/templates/provider-rsbuild-ts/module-federation.config.ts.handlebars @@ -5,6 +5,9 @@ export default createModuleFederationConfig({ exposes: { '.': './src/components/ProviderComponent.tsx', }, + experiments: { + asyncStartup: true, + }, shared: { react: { singleton: true }, 'react-dom': { singleton: true }, diff --git a/packages/create-module-federation/templates/rsbuild-common/src/bootstrap.tsx b/packages/create-module-federation/templates/rsbuild-common/src/bootstrap.tsx deleted file mode 100644 index 55f29bff5c9..00000000000 --- a/packages/create-module-federation/templates/rsbuild-common/src/bootstrap.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import App from './App'; - -const rootEl = document.getElementById('root'); -if (rootEl) { - const root = ReactDOM.createRoot(rootEl); - root.render( - - - , - ); -} diff --git a/packages/create-module-federation/templates/rsbuild-common/src/index.tsx b/packages/create-module-federation/templates/rsbuild-common/src/index.tsx index b93c7a0268a..55f29bff5c9 100644 --- a/packages/create-module-federation/templates/rsbuild-common/src/index.tsx +++ b/packages/create-module-federation/templates/rsbuild-common/src/index.tsx @@ -1 +1,13 @@ -import('./bootstrap'); +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; + +const rootEl = document.getElementById('root'); +if (rootEl) { + const root = ReactDOM.createRoot(rootEl); + root.render( + + + , + ); +}