Skip to content

Commit 6ceda80

Browse files
committed
feat: add support for disabling imports for shared modules
- Add import flag to shareConfig interface and normalization - Handle import: false modules in virtual remote entry generation - Add e2e test
1 parent 1e466bf commit 6ceda80

File tree

12 files changed

+109
-34
lines changed

12 files changed

+109
-34
lines changed

e2e/vite-webpack-rspack/tests/index.spec.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,32 @@ test.describe('Dynamic remote', () => {
131131
await expect(signUpBanner).toBeVisible();
132132
await expect(specialPromoBanner).not.toBeVisible();
133133
});
134+
135+
test('verifies shared lodash dependency', async ({ page, baseURL }) => {
136+
await page.goto(baseURL!);
137+
const showAdToggle = page.getByRole('checkbox', { name: 'Show Dynamic Ad', exact: true });
138+
139+
// Check that lodash version is displayed in SpecialPromo banner
140+
await showAdToggle.check({ force: true });
141+
142+
const specialPromoBanner = page.getByRole('heading', { level: 2, name: 'Up to 50% off!', exact: true });
143+
await expect(specialPromoBanner).toBeVisible();
144+
145+
const lodashVersionDisplay = page.getByTestId('lodash-version-display');
146+
await expect(lodashVersionDisplay).toBeVisible();
147+
const versionText = await lodashVersionDisplay.textContent();
148+
expect(versionText).toMatch(/Shared lodash v\d+\.\d+\.\d+/);
149+
150+
// Toggle off and on again to check SignUpBanner
151+
await showAdToggle.uncheck({ force: true });
152+
await showAdToggle.check({ force: true });
153+
154+
const signUpBanner = page.getByRole('heading', { level: 2, name: 'Sign up now!', exact: true });
155+
await expect(signUpBanner).toBeVisible();
156+
await expect(lodashVersionDisplay).toBeVisible();
157+
const versionText2 = await lodashVersionDisplay.textContent();
158+
expect(versionText2).toMatch(/Shared lodash v\d+\.\d+\.\d+/);
159+
});
134160
});
135161

136162
test.describe('Tests remote', () => {

examples/vite-webpack-rspack/dynamic-remote/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010
"preview": "vite preview"
1111
},
1212
"dependencies": {
13+
"@module-federation/vite": "workspace:*",
14+
"lodash": "^4.17.21",
1315
"react": "^18.3.1",
14-
"react-dom": "^18.3.1",
15-
"@module-federation/vite": "workspace:*"
16+
"react-dom": "^18.3.1"
1617
},
1718
"devDependencies": {
1819
"@eslint/js": "^9.9.0",

examples/vite-webpack-rspack/dynamic-remote/src/SignUpBanner.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1+
import _ from 'lodash';
2+
13
const SignUpBanner = () => {
24
return (
35
<div className="bg-blue-500 text-white p-4 m-4 rounded ring-offset-ring-4 flex justify-between">
46
<div>
57
<h2 className="text-xl">Sign up now!</h2>
68
<p>Get started with our amazing service today.</p>
9+
<p data-testid="lodash-version-display">Shared lodash v{_.VERSION}</p>
710
<button className="bg-white text-blue-500 p-2 rounded mt-2">Sign up</button>
811
</div>
912
<img src="https://picsum.photos/200/200" alt="Random" className="mt-2" />

examples/vite-webpack-rspack/dynamic-remote/src/SpecialPromo.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
import _ from 'lodash';
2+
13
const SpecialPromo = () => {
24
return (
35
<div className="bg-red-500 text-white p-4 m-4 rounded ring-offset-ring-4 flex justify-between">
46
<div>
57
<h2 className="text-xl">Up to 50% off!</h2>
8+
<p data-testid="lodash-version-display">Shared lodash v{_.VERSION}</p>
69
<p>Only for a limited time.</p>
710
</div>
811
<img src="https://picsum.photos/200/200" alt="Random" className="mt-2" />

examples/vite-webpack-rspack/dynamic-remote/vite.config.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ export default defineConfig({
1414
'./SignUpBanner': './src/SignUpBanner.jsx',
1515
'./SpecialPromo': './src/SpecialPromo.jsx',
1616
},
17-
shared: ['react', 'react-dom'],
17+
shared: {
18+
react: { singleton: true },
19+
'react-dom': { singleton: true },
20+
lodash: { singleton: true, import: false },
21+
},
1822
}),
1923
],
2024
server: {

examples/vite-webpack-rspack/host/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
},
1212
"dependencies": {
1313
"@module-federation/vite": "workspace:*",
14+
"lodash": "^4.17.21",
1415
"react": "^18.3.1",
1516
"react-dom": "^18.3.1"
1617
},

examples/vite-webpack-rspack/host/src/App.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import { Toggle } from './components/Toggle';
77
import { useDynamicImport } from './hooks/useDynamicImport';
88
import './index.css';
99

10+
import _ from 'lodash';
11+
_.VERSION;
12+
1013
const RemoteProduct = lazy(
1114
() =>
1215
// @ts-ignore

examples/vite-webpack-rspack/host/vite.config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const mfConfig = {
2222
type: 'module',
2323
},
2424
},
25-
shared: ['react', 'react-dom'],
25+
shared: ['react', 'react-dom', 'lodash'],
2626
};
2727

2828
// https://vitejs.dev/config/
@@ -38,5 +38,6 @@ export default defineConfig({
3838
],
3939
build: {
4040
target: 'chrome89',
41+
minify: false,
4142
},
4243
});

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646
"homepage": "https://github.com/module-federation/vite#readme",
4747
"packageManager": "[email protected]",
4848
"dependencies": {
49-
"@module-federation/runtime": "^0.17.1",
49+
"@module-federation/runtime": "^0.18.3",
50+
"@module-federation/sdk": "^0.18.3",
5051
"@rollup/pluginutils": "^5.1.0",
5152
"defu": "^6.1.4",
5253
"estree-walker": "^2",

pnpm-lock.yaml

Lines changed: 36 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)