Skip to content

Commit b877710

Browse files
clydinalan-agius4
authored andcommitted
refactor(@angular-devkit/build-angular): support async partial Webpack configuration generators
Partial Webpack configuration generators are used to create the various aspects of the final Webpack configuration for build, testing, and serving. They previously could only be synchronous but may need to perform asynchronous actions to setup the Webpack configuration in the future. This is particularly relevant as the CLI transitions from CommonJS to ESM wherein synchronous require calls need to be replaced with asynchronous dynamic imports. For dynamic imports to be successfully used the configuration generators need to support asynchronous operations.
1 parent c5e3a8b commit b877710

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

packages/angular_devkit/build_angular/src/utils/webpack-browser-config.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,16 @@ import { I18nOptions, configureI18nBuild } from './i18n-options';
2121

2222
export type BrowserWebpackConfigOptions = WebpackConfigOptions<NormalizedBrowserBuilderSchema>;
2323

24+
export type WebpackPartialGenerator = (
25+
configurationOptions: BrowserWebpackConfigOptions,
26+
) => (Promise<Configuration> | Configuration)[];
27+
2428
export async function generateWebpackConfig(
2529
workspaceRoot: string,
2630
projectRoot: string,
2731
sourceRoot: string | undefined,
2832
options: NormalizedBrowserBuilderSchema,
29-
webpackPartialGenerator: (wco: BrowserWebpackConfigOptions) => Configuration[],
33+
webpackPartialGenerator: WebpackPartialGenerator,
3034
logger: logging.LoggerApi,
3135
extraBuildOptions: Partial<NormalizedBrowserBuilderSchema>,
3236
): Promise<Configuration> {
@@ -55,15 +59,16 @@ export async function generateWebpackConfig(
5559

5660
wco.buildOptions.progress = defaultProgress(wco.buildOptions.progress);
5761

58-
const webpackConfig = webpackMerge(webpackPartialGenerator(wco));
62+
const partials = await Promise.all(webpackPartialGenerator(wco));
63+
const webpackConfig = webpackMerge(partials);
5964

6065
return webpackConfig;
6166
}
6267

6368
export async function generateI18nBrowserWebpackConfigFromContext(
6469
options: BrowserBuilderSchema,
6570
context: BuilderContext,
66-
webpackPartialGenerator: (wco: BrowserWebpackConfigOptions) => Configuration[],
71+
webpackPartialGenerator: WebpackPartialGenerator,
6772
extraBuildOptions: Partial<NormalizedBrowserBuilderSchema> = {},
6873
): Promise<{
6974
config: Configuration;
@@ -131,7 +136,7 @@ export async function generateI18nBrowserWebpackConfigFromContext(
131136
export async function generateBrowserWebpackConfigFromContext(
132137
options: BrowserBuilderSchema,
133138
context: BuilderContext,
134-
webpackPartialGenerator: (wco: BrowserWebpackConfigOptions) => Configuration[],
139+
webpackPartialGenerator: WebpackPartialGenerator,
135140
extraBuildOptions: Partial<NormalizedBrowserBuilderSchema> = {},
136141
): Promise<{ config: Configuration; projectRoot: string; projectSourceRoot?: string }> {
137142
const projectName = context.target && context.target.project;

0 commit comments

Comments
 (0)