Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
a02ac6c
refactor: inline bootstrap into index for asyncStartup examples
ScriptedAlchemy Feb 2, 2026
69a4d9e
refactor: inline all remaining bootstrap files and add asyncStartup e…
ScriptedAlchemy Feb 2, 2026
3beaa39
fix: switch native MFP to enhanced, fix CI failures
ScriptedAlchemy Feb 3, 2026
ac88d69
fix: use version-first shareStrategy for rspack-webpack-offload
ScriptedAlchemy Feb 3, 2026
e7ed0af
refactor: switch modernjs apps to @module-federation/modern-js plugin
ScriptedAlchemy Feb 3, 2026
c88a992
refactor: switch basic-host-remote to @module-federation/modern-js pl…
ScriptedAlchemy Feb 3, 2026
755675f
chore: sync modernjs package versions via repotools
ScriptedAlchemy Feb 3, 2026
1d769db
chore: upgrade modernjs deps to 2.70.4, fix workspace, remove depreca…
ScriptedAlchemy Feb 3, 2026
392a525
fix(e2e): make asyncStartup examples green
ScriptedAlchemy Feb 3, 2026
32442d6
fix(quasar): disable auto-open in CI
ScriptedAlchemy Feb 3, 2026
e37c5df
chore(quasar): never auto-open dev server
ScriptedAlchemy Feb 3, 2026
846bc5e
chore(quasar): stop tracking generated .quasar
ScriptedAlchemy Feb 3, 2026
92c84c9
fix(quasar): avoid committing .quasar; use src bootstrap
ScriptedAlchemy Feb 3, 2026
2fd1a8e
fix(quasar): restore async bootstrap entry
ScriptedAlchemy Feb 3, 2026
c3bc274
fix(quasar): make e2e stable in CI
ScriptedAlchemy Feb 4, 2026
0a50920
fix(quasar,umd-federation): stabilize CI for last two failing examples
ScriptedAlchemy Feb 4, 2026
88be537
fix(quasar): use absolute paths for MFP exposes
ScriptedAlchemy Feb 4, 2026
c2ae701
fix(quasar,umd-federation): revert to native MFP for incompatible exa…
ScriptedAlchemy Feb 4, 2026
06deb12
fix(quasar,umd-federation): use enhanced MFP with manifest:false
ScriptedAlchemy Feb 4, 2026
f0047ef
fix(quasar,umd-federation): use expose wrappers and revert incompatib…
ScriptedAlchemy Feb 4, 2026
4af5bf9
fix(quasar): set explicit webpack context and use absolute expose paths
ScriptedAlchemy Feb 4, 2026
ab45f55
fix(quasar): pre-set FEDERATION_WEBPACK_PATH to fix pnpm dual webpack…
ScriptedAlchemy Feb 4, 2026
a329f78
debug(quasar): add compilation diagnostics and swap expose order
ScriptedAlchemy Feb 4, 2026
d32923a
debug(quasar): deep compilation diagnostics for CI BUILD-001
ScriptedAlchemy Feb 4, 2026
0b233ee
fix(quasar): avoid double async boundary in MF entry point
ScriptedAlchemy Feb 4, 2026
619a399
fix(quasar): use Quasar default entry instead of custom bootstrap
ScriptedAlchemy Feb 4, 2026
ccf4ea1
debug(quasar): add CI-only diagnostics for BUILD-001
ScriptedAlchemy Feb 4, 2026
a0aaf2f
fix(quasar): set webpack context to fix BUILD-001 in CI
ScriptedAlchemy Feb 4, 2026
e8ad5ef
debug(quasar): add compiler context and module build diagnostics
ScriptedAlchemy Feb 4, 2026
cc40232
fix(quasar): use native webpack MFP to avoid BUILD-001 in CI
ScriptedAlchemy Feb 4, 2026
f9cdfdb
fix(quasar): use native MFP with eager sharing and no entry override
ScriptedAlchemy Feb 4, 2026
04b0bf8
fix(quasar): use Enhanced MFP without asyncStartup to avoid BUILD-001
ScriptedAlchemy Feb 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 0 additions & 7 deletions advanced-api/automatic-vendor-sharing/app1/src/bootstrap.js

This file was deleted.

8 changes: 7 additions & 1 deletion advanced-api/automatic-vendor-sharing/app1/src/index.js
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
import './bootstrap';
import App from './App';
import React from 'react';
import { createRoot } from 'react-dom/client';

const container = document.getElementById('root');
const root = createRoot(container);
root.render(<App />);
7 changes: 0 additions & 7 deletions advanced-api/automatic-vendor-sharing/app2/src/bootstrap.js

This file was deleted.

8 changes: 7 additions & 1 deletion advanced-api/automatic-vendor-sharing/app2/src/index.js
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
import './bootstrap';
import App from './App';
import React from 'react';
import { createRoot } from 'react-dom/client';

const container = document.getElementById('root');
const root = createRoot(container);
root.render(<App />);
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ module.exports = {
new ModuleFederationPlugin({
experiments: { asyncStartup: true },
name: 'host',
shareStrategy: 'loaded-first',
runtimePlugins: [],
shared: {
react: {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1 +1,32 @@
import './bootstrap';
import App from './components/App';
import React from 'react';
import { createRoot } from 'react-dom/client';
import ErrorBoundary from './components/ErrorBoundary';

// React 18 createRoot API
const container = document.getElementById('root');
const root = createRoot(container);

root.render(
<React.StrictMode>
<ErrorBoundary>
<App />
</ErrorBoundary>
</React.StrictMode>,
);

// Performance monitoring
if (typeof window !== 'undefined' && window.performance) {
window.addEventListener('load', () => {
setTimeout(() => {
const perfData = performance.getEntriesByType('navigation')[0];
console.log('Host App Performance:', {
loadTime: Math.round(perfData.loadEventEnd - perfData.loadEventStart),
domContentLoaded: Math.round(
perfData.domContentLoadedEventEnd - perfData.domContentLoadedEventStart,
),
totalTime: Math.round(perfData.loadEventEnd - perfData.fetchStart),
});
}, 0);
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ module.exports = {
new ModuleFederationPlugin({
experiments: { asyncStartup: true },
name: 'host',
shareStrategy: 'loaded-first',
shared: {
react: {
singleton: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ module.exports = {
new ModuleFederationPlugin({
experiments: { asyncStartup: true },
name: 'remote',
shareStrategy: 'loaded-first',
filename: 'remoteEntry.js',
exposes: {
'./Widget': './src/components/WidgetWrapper',
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1 +1,29 @@
import './bootstrap';
import App from './components/App';
import React from 'react';
import { createRoot } from 'react-dom/client';

// React 18 createRoot API
const container = document.getElementById('root');
const root = createRoot(container);

root.render(
<React.StrictMode>
<App />
</React.StrictMode>,
);

// Performance monitoring for remote
if (typeof window !== 'undefined' && window.performance) {
window.addEventListener('load', () => {
setTimeout(() => {
const perfData = performance.getEntriesByType('navigation')[0];
console.log('Remote App Performance:', {
loadTime: Math.round(perfData.loadEventEnd - perfData.loadEventStart),
domContentLoaded: Math.round(
perfData.domContentLoadedEventEnd - perfData.domContentLoadedEventStart,
),
totalTime: Math.round(perfData.loadEventEnd - perfData.fetchStart),
});
}, 0);
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ module.exports = {
new ModuleFederationPlugin({
experiments: { asyncStartup: true },
name: 'remote',
shareStrategy: 'loaded-first',
filename: 'remoteEntry.js',
exposes: {
'./Widget': './src/components/WidgetWrapper',
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,11 @@ console.log(`[Dynamic Remote Init] Setting ${app2Module.urlGlobalVariable} to:`,
// window.app3Url = '//different-host:4001';
// window.app4Url = '//cdn.example.com/remotes';

// Bootstrap the application after setting up dynamic configurations.
//
// With MF asyncStartup enabled in the config, we no longer need the dynamic
// bootstrap import workaround.
import './bootstrap';
import App from './App.tsx';
import React from 'react';
import { createRoot } from 'react-dom/client';

// Using React 18 createRoot API for better performance and concurrent features
const container = document.getElementById('root');
const root = createRoot(container);
root.render(<App />);
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ module.exports = {
new ModuleFederationPlugin({
experiments: { asyncStartup: true },
name: app1Module.name,
shareStrategy: 'loaded-first',
filename: app1Module.fileName,
dts: false,
remotes: {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1 +1,8 @@
import './bootstrap';
import App from './App';
import React from 'react';
import { createRoot } from 'react-dom/client';

// Using React 18 createRoot API for better performance and concurrent features
const container = document.getElementById('root');
const root = createRoot(container);
root.render(<App />);
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ module.exports = {
new ModuleFederationPlugin({
experiments: { asyncStartup: true },
name: app2Module.name,
shareStrategy: 'loaded-first',
library: { type: 'var', name: app2Module.name },
filename: app2Module.fileName,
dts: false,
Expand Down
1 change: 1 addition & 0 deletions advanced-api/dynamic-remotes/app1/rspack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ module.exports = {
new ModuleFederationPlugin({
experiments: { asyncStartup: true },
name: 'app1',
shareStrategy: 'loaded-first',
// adds react as shared module
// version is inferred from package.json
// there is no version check for the required version
Expand Down
7 changes: 0 additions & 7 deletions advanced-api/dynamic-remotes/app1/src/bootstrap.js

This file was deleted.

8 changes: 7 additions & 1 deletion advanced-api/dynamic-remotes/app1/src/index.js
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
import './bootstrap';
import App from './App';
import React from 'react';
import { createRoot } from 'react-dom/client';

const container = document.getElementById('root');
const root = createRoot(container);
root.render(<App />);
1 change: 1 addition & 0 deletions advanced-api/dynamic-remotes/app1/webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ module.exports = {
new ModuleFederationPlugin({
experiments: { asyncStartup: true },
name: 'app1',
shareStrategy: 'loaded-first',
// adds react as shared module
// version is inferred from package.json
// there is no version check for the required version
Expand Down
1 change: 1 addition & 0 deletions advanced-api/dynamic-remotes/app2/rspack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ module.exports = {
new ModuleFederationPlugin({
experiments: { asyncStartup: true },
name: 'app2',
shareStrategy: 'loaded-first',
filename: 'remoteEntry.js',
exposes: {
'./Widget': './src/Widget',
Expand Down
7 changes: 0 additions & 7 deletions advanced-api/dynamic-remotes/app2/src/bootstrap.js

This file was deleted.

8 changes: 7 additions & 1 deletion advanced-api/dynamic-remotes/app2/src/index.js
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
import './bootstrap';
import App from './App';
import React from 'react';
import { createRoot } from 'react-dom/client';

const container = document.getElementById('root');
const root = createRoot(container);
root.render(<App />);
1 change: 1 addition & 0 deletions advanced-api/dynamic-remotes/app2/webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ module.exports = {
new ModuleFederationPlugin({
experiments: { asyncStartup: true },
name: 'app2',
shareStrategy: 'loaded-first',
filename: 'remoteEntry.js',
exposes: {
'./Widget': './src/Widget',
Expand Down
1 change: 1 addition & 0 deletions advanced-api/dynamic-remotes/app3/rspack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ module.exports = {
new ModuleFederationPlugin({
experiments: { asyncStartup: true },
name: 'app3',
shareStrategy: 'loaded-first',
filename: 'remoteEntry.js',
exposes: {
'./Widget': './src/Widget',
Expand Down
7 changes: 0 additions & 7 deletions advanced-api/dynamic-remotes/app3/src/bootstrap.js

This file was deleted.

8 changes: 7 additions & 1 deletion advanced-api/dynamic-remotes/app3/src/index.js
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
import './bootstrap';
import App from './App';
import React from 'react';
import { createRoot } from 'react-dom/client';

const container = document.getElementById('root');
const root = createRoot(container);
root.render(<App />);
1 change: 1 addition & 0 deletions advanced-api/dynamic-remotes/app3/webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ module.exports = {
new ModuleFederationPlugin({
experiments: { asyncStartup: true },
name: 'app3',
shareStrategy: 'loaded-first',
filename: 'remoteEntry.js',
exposes: {
'./Widget': './src/Widget',
Expand Down
1 change: 0 additions & 1 deletion apollo-client/app1/src/client/index.ts

This file was deleted.

1 change: 0 additions & 1 deletion apollo-client/app2/src/client/index.ts

This file was deleted.

1 change: 1 addition & 0 deletions basic-host-remote/app1/modern.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export default defineConfig({
appendPlugins([
new ModuleFederationPlugin({
name: 'app1',
shareStrategy: 'loaded-first',
remotes: {
app2: 'app2@http://localhost:3002/static/js/remoteEntry.js',
},
Expand Down
1 change: 1 addition & 0 deletions basic-host-remote/app2/modern.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export default defineConfig({
appendPlugins([
new ModuleFederationPlugin({
name: 'app2',
shareStrategy: 'loaded-first',
library: { type: 'window', name: 'app2' },
runtime: false,
filename: 'static/js/remoteEntry.js',
Expand Down
2 changes: 2 additions & 0 deletions clo/host/modulefederation.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ const { dependencies } = require('./package.json');

module.exports = {
name: 'host',
shareStrategy: 'loaded-first',
experiments: { asyncStartup: true },
remotes: {
remote: 'remote@http://localhost:3002/remoteEntry.js',
},
Expand Down
11 changes: 0 additions & 11 deletions clo/host/src/bootstrap.js

This file was deleted.

Loading
Loading