Skip to content

Commit 656d69b

Browse files
authored
fix(module-federation): ensure @nx/module-federation package is installed for users (#29416)
## Current Behavior The `@nx/module-federation` package is a direct dependency of some of the other packages in the Nx Plugin ecosystem. It should be resolved correctly by package managers such that it can be used when setting up MF projects. However, some users are facing issues with module resolutions where the package is not found as expected. ## Expected Behavior Install the package directly for the user to ensure module resolution works as expected. ## Related Issue(s) Fixes #29269
1 parent dfd5014 commit 656d69b

File tree

12 files changed

+148
-0
lines changed

12 files changed

+148
-0
lines changed

packages/angular/migrations.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,12 @@
332332
},
333333
"description": "Remove the deprecated 'tailwindConfig' option from ng-packagr executors. Tailwind CSS configurations located at the project or workspace root will be picked up automatically.",
334334
"factory": "./src/migrations/update-20-2-0/remove-tailwind-config-from-ng-packagr-executors"
335+
},
336+
"ensure-nx-module-federation-package": {
337+
"cli": "nx",
338+
"version": "20.3.0-beta.2",
339+
"description": "If workspace includes Module Federation projects, ensure the new @nx/module-federation package is installed.",
340+
"factory": "./src/migrations/update-20-3-0/ensure-nx-module-federation-package"
335341
}
336342
},
337343
"packageJsonUpdates": {

packages/angular/src/generators/setup-mf/setup-mf.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export async function setupMf(tree: Tree, rawOptions: Schema) {
5151
{
5252
'@nx/web': nxVersion,
5353
'@nx/webpack': nxVersion,
54+
'@nx/module-federation': nxVersion,
5455
}
5556
);
5657
}
@@ -82,6 +83,7 @@ export async function setupMf(tree: Tree, rawOptions: Schema) {
8283
{
8384
'@nx/webpack': nxVersion,
8485
'@module-federation/enhanced': moduleFederationEnhancedVersion,
86+
'@nx/module-federation': nxVersion,
8587
}
8688
);
8789
}

packages/angular/src/migrations/update-20-2-0/migrate-with-mf-import-to-new-package.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ import {
33
formatFiles,
44
readProjectConfiguration,
55
visitNotIgnoredFiles,
6+
addDependenciesToPackageJson,
67
} from '@nx/devkit';
78
import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils';
89
import { tsquery } from '@phenomnomnominal/tsquery';
10+
import { nxVersion } from '../../utils/versions';
911

1012
const NX_ANGULAR_MODULE_FEDERATION_IMPORT_SELECTOR =
1113
'ImportDeclaration > StringLiteral[value=@nx/angular/module-federation], VariableStatement CallExpression:has(Identifier[name=require]) > StringLiteral[value=@nx/angular/module-federation]';
@@ -53,5 +55,15 @@ export default async function migrateWithMfImport(tree: Tree) {
5355
});
5456
}
5557

58+
if (projects.size !== 0) {
59+
addDependenciesToPackageJson(
60+
tree,
61+
{},
62+
{
63+
'@nx/module-federation': nxVersion,
64+
}
65+
);
66+
}
67+
5668
await formatFiles(tree);
5769
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import {
2+
type Tree,
3+
readProjectConfiguration,
4+
addDependenciesToPackageJson,
5+
} from '@nx/devkit';
6+
import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils';
7+
import { nxVersion } from '../../utils/versions';
8+
9+
export default async function ensureMfPackage(tree: Tree) {
10+
const projects = new Set<string>();
11+
12+
forEachExecutorOptions(
13+
tree,
14+
'@nx/angular:module-federation-dev-server',
15+
(options, project, target) => {
16+
const projectConfig = readProjectConfiguration(tree, project);
17+
projects.add(projectConfig.root);
18+
}
19+
);
20+
21+
if (projects.size !== 0) {
22+
addDependenciesToPackageJson(
23+
tree,
24+
{},
25+
{
26+
'@nx/module-federation': nxVersion,
27+
}
28+
);
29+
}
30+
}

packages/react/migrations.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@
4141
"version": "20.2.0-beta.2",
4242
"description": "Update the withModuleFederation import use @nx/module-federation/webpack.",
4343
"factory": "./src/migrations/update-20-2-0/migrate-with-mf-import-to-new-package"
44+
},
45+
"ensure-nx-module-federation-package": {
46+
"cli": "nx",
47+
"version": "20.3.0-beta.2",
48+
"description": "If workspace includes Module Federation projects, ensure the new @nx/module-federation package is installed.",
49+
"factory": "./src/migrations/update-20-3-0/ensure-nx-module-federation-package"
4450
}
4551
},
4652
"packageJsonUpdates": {

packages/react/src/generators/host/host.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ export async function hostGenerator(
153153
{ '@module-federation/enhanced': moduleFederationEnhancedVersion },
154154
{
155155
'@nx/web': nxVersion,
156+
'@nx/module-federation': nxVersion,
156157
}
157158
);
158159
tasks.push(installTask);

packages/react/src/generators/remote/remote.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ export async function remoteGenerator(host: Tree, schema: Schema) {
226226
{
227227
'@module-federation/enhanced': moduleFederationEnhancedVersion,
228228
'@nx/web': nxVersion,
229+
'@nx/module-federation': nxVersion,
229230
}
230231
);
231232
tasks.push(installTask);

packages/react/src/migrations/update-20-2-0/migrate-with-mf-import-to-new-package.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ import {
33
formatFiles,
44
readProjectConfiguration,
55
visitNotIgnoredFiles,
6+
addDependenciesToPackageJson,
67
} from '@nx/devkit';
78
import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils';
89
import { tsquery } from '@phenomnomnominal/tsquery';
10+
import { nxVersion } from '../../utils/versions';
911

1012
const NX_RSPACK_MODULE_FEDERATION_IMPORT_SELECTOR =
1113
'ImportDeclaration > StringLiteral[value=@nx/react/module-federation], VariableStatement CallExpression:has(Identifier[name=require]) > StringLiteral[value=@nx/react/module-federation]';
@@ -53,5 +55,15 @@ export default async function migrateWithMfImport(tree: Tree) {
5355
});
5456
}
5557

58+
if (projects.size !== 0) {
59+
addDependenciesToPackageJson(
60+
tree,
61+
{},
62+
{
63+
'@nx/module-federation': nxVersion,
64+
}
65+
);
66+
}
67+
5668
await formatFiles(tree);
5769
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import {
2+
type Tree,
3+
readProjectConfiguration,
4+
addDependenciesToPackageJson,
5+
} from '@nx/devkit';
6+
import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils';
7+
import { nxVersion } from '../../utils/versions';
8+
9+
export default async function ensureMfPackage(tree: Tree) {
10+
const projects = new Set<string>();
11+
12+
forEachExecutorOptions(
13+
tree,
14+
'@nx/react:module-federation-dev-server',
15+
(options, project, target) => {
16+
const projectConfig = readProjectConfiguration(tree, project);
17+
projects.add(projectConfig.root);
18+
}
19+
);
20+
21+
if (projects.size !== 0) {
22+
addDependenciesToPackageJson(
23+
tree,
24+
{},
25+
{
26+
'@nx/module-federation': nxVersion,
27+
}
28+
);
29+
}
30+
}

packages/rspack/migrations.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@
55
"version": "20.2.0-beta.3",
66
"description": "Update the withModuleFederation import use @nx/module-federation/rspack.",
77
"factory": "./src/migrations/update-20-2-0/migrate-with-mf-import-to-new-package"
8+
},
9+
"ensure-nx-module-federation-package": {
10+
"cli": "nx",
11+
"version": "20.3.0-beta.2",
12+
"description": "If workspace includes Module Federation projects, ensure the new @nx/module-federation package is installed.",
13+
"factory": "./src/migrations/update-20-3-0/ensure-nx-module-federation-package"
814
}
915
},
1016
"packageJsonUpdates": {

packages/rspack/src/migrations/update-20-2-0/migrate-with-mf-import-to-new-package.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ import {
33
formatFiles,
44
readProjectConfiguration,
55
visitNotIgnoredFiles,
6+
addDependenciesToPackageJson,
67
} from '@nx/devkit';
78
import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils';
89
import { tsquery } from '@phenomnomnominal/tsquery';
10+
import { nxVersion } from '../../utils/versions';
911

1012
const NX_RSPACK_MODULE_FEDERATION_IMPORT_SELECTOR =
1113
'ImportDeclaration > StringLiteral[value=@nx/rspack/module-federation], VariableStatement CallExpression:has(Identifier[name=require]) > StringLiteral[value=@nx/rspack/module-federation]';
@@ -53,5 +55,15 @@ export default async function migrateWithMfImport(tree: Tree) {
5355
});
5456
}
5557

58+
if (projects.size !== 0) {
59+
addDependenciesToPackageJson(
60+
tree,
61+
{},
62+
{
63+
'@nx/module-federation': nxVersion,
64+
}
65+
);
66+
}
67+
5668
await formatFiles(tree);
5769
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import {
2+
type Tree,
3+
readProjectConfiguration,
4+
addDependenciesToPackageJson,
5+
} from '@nx/devkit';
6+
import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils';
7+
import { nxVersion } from '../../utils/versions';
8+
9+
export default async function ensureMfPackage(tree: Tree) {
10+
const projects = new Set<string>();
11+
12+
forEachExecutorOptions(
13+
tree,
14+
'@nx/rspack:module-federation-dev-server',
15+
(options, project, target) => {
16+
const projectConfig = readProjectConfiguration(tree, project);
17+
projects.add(projectConfig.root);
18+
}
19+
);
20+
21+
if (projects.size !== 0) {
22+
addDependenciesToPackageJson(
23+
tree,
24+
{},
25+
{
26+
'@nx/module-federation': nxVersion,
27+
}
28+
);
29+
}
30+
}

0 commit comments

Comments
 (0)