Skip to content

Commit 4eca4ab

Browse files
clydinfilipesilva
authored andcommitted
fix(@ngtools/webpack): properly merge webpack 5 resolver options
Webpack 5 requires the use of its `cleverMerge` utility to update resolver options.
1 parent a4d31fd commit 4eca4ab

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

packages/ngtools/webpack/src/angular_compiler_plugin.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ import {
8181
} from './webpack';
8282
import { addError, addWarning } from './webpack-diagnostics';
8383
import { createWebpackInputHost } from './webpack-input-host';
84-
import { isWebpackFiveOrHigher } from './webpack-version';
84+
import { isWebpackFiveOrHigher, mergeResolverMainFields } from './webpack-version';
8585

8686
export class AngularCompilerPlugin {
8787
private _options: AngularCompilerPluginOptions;
@@ -931,10 +931,7 @@ export class AngularCompilerPlugin {
931931
const originalMainFields: string[] = resolveOptions.mainFields;
932932
const ivyMainFields = originalMainFields.map(f => `${f}_ivy_ngcc`);
933933

934-
return {
935-
...resolveOptions,
936-
mainFields: [...ivyMainFields, ...originalMainFields],
937-
};
934+
return mergeResolverMainFields(resolveOptions, originalMainFields, ivyMainFields);
938935
});
939936
}
940937

packages/ngtools/webpack/src/webpack-version.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,24 @@ export function isWebpackFiveOrHigher(): boolean {
2121

2222
return cachedIsWebpackFiveOrHigher;
2323
}
24+
25+
export function mergeResolverMainFields(
26+
options: object,
27+
originalMainFields: string[],
28+
extraMainFields: string[],
29+
): object {
30+
const cleverMerge = (webpack as {
31+
util?: { cleverMerge?: (first: object, second: object) => object };
32+
}).util?.cleverMerge;
33+
if (cleverMerge) {
34+
// Webpack 5
35+
// https://github.com/webpack/webpack/issues/11635#issuecomment-707016779
36+
return cleverMerge(options, { mainFields: [...extraMainFields, '...'] });
37+
} else {
38+
// Webpack 4
39+
return {
40+
...options,
41+
mainFields: [...extraMainFields, ...originalMainFields],
42+
};
43+
}
44+
}

0 commit comments

Comments
 (0)