refactor(@ngtools/webpack): initialize paths plugin in resolve options hook

This change reduces the number of different Webpack resolver factory hooks required to initialize the compiler plugins.
Webpack 5 also requires the path plugin to be configured earlier in the process and the options hook provides that ability.
This commit is contained in:
Charles Lyding 2021-02-22 10:11:33 -05:00 committed by Alan Agius
parent 9dc094fb94
commit 2e3b9541e7
2 changed files with 15 additions and 10 deletions

View File

@ -939,12 +939,16 @@ export class AngularCompilerPlugin {
});
}
// tslint:disable-next-line:no-any
(compiler as any).resolverFactory.hooks.resolver
// tslint:disable-next-line: no-any
(compiler as any).resolverFactory.hooks.resolveOptions
.for('normal')
// tslint:disable-next-line:no-any
.tap('angular-compiler', (resolver: any) => {
new TypeScriptPathsPlugin(this._compilerOptions).apply(resolver);
.tap('angular-compiler', (resolveOptions: { plugins: unknown[] }) => {
if (!resolveOptions.plugins) {
resolveOptions.plugins = [];
}
resolveOptions.plugins.push(new TypeScriptPathsPlugin(this._compilerOptions));
return resolveOptions;
});
compiler.hooks.normalModuleFactory.tap('angular-compiler', nmf => {

View File

@ -145,16 +145,17 @@ export class AngularWebpackPlugin {
// Example: module -> module__ivy_ngcc
resolverFactoryHooks.resolveOptions
.for('normal')
.tap(PLUGIN_NAME, (resolveOptions: { mainFields: string[] }) => {
.tap(PLUGIN_NAME, (resolveOptions: { mainFields: string[], plugins: unknown[] }) => {
const originalMainFields = resolveOptions.mainFields;
const ivyMainFields = originalMainFields.map((f) => `${f}_ivy_ngcc`);
if (!resolveOptions.plugins) {
resolveOptions.plugins = [];
}
resolveOptions.plugins.push(pathsPlugin);
return mergeResolverMainFields(resolveOptions, originalMainFields, ivyMainFields);
});
resolverFactoryHooks.resolver.for('normal').tap(PLUGIN_NAME, (resolver: {}) => {
pathsPlugin.apply(resolver);
});
});
let ngccProcessor: NgccProcessor | undefined;