68 lines
1.8 KiB
TypeScript
68 lines
1.8 KiB
TypeScript
import type { ProjectConfiguration, Tree } from '@nrwl/devkit';
|
|
import {
|
|
generateFiles,
|
|
joinPathFragments,
|
|
readNxJson,
|
|
readProjectConfiguration,
|
|
} from '@nrwl/devkit';
|
|
import type { Schema } from '../schema';
|
|
import { addRoute } from '../../../utils/nx-devkit/route-utils';
|
|
|
|
export function addRemoteEntry(
|
|
tree: Tree,
|
|
{ appName, routing, mfType, prefix, standalone }: Schema,
|
|
appRoot: string
|
|
) {
|
|
prefix =
|
|
prefix ??
|
|
(
|
|
readProjectConfiguration(tree, appName) as ProjectConfiguration & {
|
|
prefix?: string;
|
|
}
|
|
)?.prefix ??
|
|
readNxJson(tree).npmScope;
|
|
generateFiles(
|
|
tree,
|
|
standalone
|
|
? joinPathFragments(
|
|
__dirname,
|
|
'../files/standalone-entry-component-files'
|
|
)
|
|
: joinPathFragments(__dirname, '../files/entry-module-files'),
|
|
`${appRoot}/src/app/remote-entry`,
|
|
{
|
|
tmpl: '',
|
|
appName,
|
|
routing,
|
|
prefix,
|
|
}
|
|
);
|
|
|
|
if (standalone && routing) {
|
|
addRoute(
|
|
tree,
|
|
joinPathFragments(appRoot, 'src/app/app.routes.ts'),
|
|
`{path: '', loadChildren: () => import('./remote-entry/entry.routes').then(m => m.remoteRoutes)}`
|
|
);
|
|
} else {
|
|
if (routing) {
|
|
addRoute(
|
|
tree,
|
|
joinPathFragments(appRoot, 'src/app/app.routes.ts'),
|
|
`{path: '', loadChildren: () => import('./remote-entry/entry.module').then(m => m.RemoteEntryModule)}`
|
|
);
|
|
}
|
|
|
|
tree.write(
|
|
`${appRoot}/src/app/app.module.ts`,
|
|
`/*
|
|
* This RemoteEntryModule is imported here to allow TS to find the Module during
|
|
* compilation, allowing it to be included in the built bundle. This is required
|
|
* for the Module Federation Plugin to expose the Module correctly.
|
|
* */
|
|
import { RemoteEntryModule } from './remote-entry/entry.module';
|
|
${tree.read(`${appRoot}/src/app/app.module.ts`, 'utf-8')}`
|
|
);
|
|
}
|
|
}
|