cleanup(react): simplify collecting mf application dependencies (#10024)
This commit is contained in:
parent
fcc6197425
commit
91fc6f6866
@ -15,52 +15,32 @@ import { readWorkspaceJson } from 'nx/src/project-graph/file-utils';
|
|||||||
import { ModuleFederationConfig, Remotes } from './models';
|
import { ModuleFederationConfig, Remotes } from './models';
|
||||||
import ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');
|
import ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');
|
||||||
|
|
||||||
interface DependencySets {
|
function collectDependencies(
|
||||||
|
projectGraph: ProjectGraph,
|
||||||
|
name: string,
|
||||||
|
dependencies = {
|
||||||
|
workspaceLibraries: new Set<string>(),
|
||||||
|
npmPackages: new Set<string>(),
|
||||||
|
},
|
||||||
|
seen: Set<string> = new Set()
|
||||||
|
): {
|
||||||
workspaceLibraries: Set<string>;
|
workspaceLibraries: Set<string>;
|
||||||
npmPackages: Set<string>;
|
npmPackages: Set<string>;
|
||||||
}
|
} {
|
||||||
|
if (seen.has(name)) {
|
||||||
function recursivelyResolveWorkspaceDependents(
|
return dependencies;
|
||||||
projectGraph: ProjectGraph<any>,
|
|
||||||
target: string,
|
|
||||||
dependencySets: DependencySets,
|
|
||||||
seenTargets: Set<string> = new Set()
|
|
||||||
) {
|
|
||||||
if (seenTargets.has(target)) {
|
|
||||||
return [];
|
|
||||||
}
|
}
|
||||||
let dependencies = [target];
|
seen.add(name);
|
||||||
seenTargets.add(target);
|
|
||||||
|
|
||||||
const workspaceDependencies = (
|
(projectGraph.dependencies[name] ?? []).forEach((dependency) => {
|
||||||
projectGraph.dependencies[target] ?? []
|
if (dependency.target.startsWith('npm:')) {
|
||||||
).filter((dep) => {
|
dependencies.npmPackages.add(dependency.target.replace('npm:', ''));
|
||||||
const isNpm = dep.target.startsWith('npm:');
|
|
||||||
|
|
||||||
// If this is a npm dep ensure it is going to be added as a dep of this MFE so it can be shared if needed
|
|
||||||
if (isNpm) {
|
|
||||||
dependencySets.npmPackages.add(dep.target.replace('npm:', ''));
|
|
||||||
} else {
|
} else {
|
||||||
dependencySets.workspaceLibraries.add(dep.target);
|
dependencies.workspaceLibraries.add(dependency.target);
|
||||||
|
collectDependencies(projectGraph, dependency.target, dependencies, seen);
|
||||||
}
|
}
|
||||||
|
|
||||||
return !isNpm;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (workspaceDependencies.length > 0) {
|
|
||||||
for (const dep of workspaceDependencies) {
|
|
||||||
dependencies = [
|
|
||||||
...dependencies,
|
|
||||||
...recursivelyResolveWorkspaceDependents(
|
|
||||||
projectGraph,
|
|
||||||
dep.target,
|
|
||||||
dependencySets,
|
|
||||||
seenTargets
|
|
||||||
),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return dependencies;
|
return dependencies;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,45 +87,17 @@ async function getDependentPackagesForProject(name: string) {
|
|||||||
projectGraph = await createProjectGraphAsync();
|
projectGraph = await createProjectGraphAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build Sets for the direct deps (internal and external) for this MFE app
|
const { npmPackages, workspaceLibraries } = collectDependencies(
|
||||||
const dependencySets = projectGraph.dependencies[name].reduce(
|
projectGraph,
|
||||||
(dependencies, dependency) => {
|
name
|
||||||
const workspaceLibraries = new Set(dependencies.workspaceLibraries);
|
);
|
||||||
const npmPackages = new Set(dependencies.npmPackages);
|
|
||||||
|
|
||||||
if (dependency.target.startsWith('npm:')) {
|
|
||||||
npmPackages.add(dependency.target.replace('npm:', ''));
|
|
||||||
} else {
|
|
||||||
workspaceLibraries.add(dependency.target);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
workspaceLibraries,
|
workspaceLibraries: mapWorkspaceLibrariesToTsConfigImport([
|
||||||
npmPackages,
|
...workspaceLibraries,
|
||||||
|
]),
|
||||||
|
npmPackages: [...npmPackages],
|
||||||
};
|
};
|
||||||
},
|
|
||||||
{ workspaceLibraries: new Set<string>(), npmPackages: new Set<string>() }
|
|
||||||
);
|
|
||||||
|
|
||||||
const seenWorkspaceLibraries = new Set<string>();
|
|
||||||
dependencySets.workspaceLibraries.forEach((workspaceLibrary) => {
|
|
||||||
recursivelyResolveWorkspaceDependents(
|
|
||||||
projectGraph,
|
|
||||||
workspaceLibrary,
|
|
||||||
dependencySets,
|
|
||||||
seenWorkspaceLibraries
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
const deps = {
|
|
||||||
workspaceLibraries: [...dependencySets.workspaceLibraries],
|
|
||||||
npmPackages: [...dependencySets.npmPackages],
|
|
||||||
};
|
|
||||||
|
|
||||||
deps.workspaceLibraries = mapWorkspaceLibrariesToTsConfigImport(
|
|
||||||
deps.workspaceLibraries
|
|
||||||
);
|
|
||||||
return deps;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function determineRemoteUrl(remote: string) {
|
function determineRemoteUrl(remote: string) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user