From 03cb3d3e6ee89bb4c08ecec4d320076326d6e426 Mon Sep 17 00:00:00 2001 From: arpadbozzay Date: Thu, 19 Jan 2023 10:33:58 +0100 Subject: [PATCH] use modify entry plugin in after env hook --- libs/mf/src/utils/modify-entry-plugin.ts | 56 +++++++++++++++--------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/libs/mf/src/utils/modify-entry-plugin.ts b/libs/mf/src/utils/modify-entry-plugin.ts index 08606a67..5938be66 100644 --- a/libs/mf/src/utils/modify-entry-plugin.ts +++ b/libs/mf/src/utils/modify-entry-plugin.ts @@ -1,3 +1,4 @@ +const PLUGIN_NAME = 'modify-entry-plugin'; export class ModifyEntryPlugin { config: unknown; constructor(config) { @@ -5,26 +6,41 @@ export class ModifyEntryPlugin { } apply(compiler) { - const mergeEntry = (keyFn, key) => [ - ...(keyFn(this.config[key]) || []), - ...(keyFn(compiler.options.entry[key]) || []), - ]; - const cfgOrRemove = (objFn, valueFn, key) => { - const values = mergeEntry(valueFn, key); - return values.length > 0 ? objFn(values) : {}; - }; - Object.keys(this.config).forEach((key) => { - compiler.options.entry[key] = { - ...cfgOrRemove( - (v) => ({ import: v }), - (c) => c.import, - key - ), - ...cfgOrRemove( - (v) => ({ dependOn: v }), - (c) => c.dependOn, - key - ), + compiler.hooks.afterEnvironment.tap(PLUGIN_NAME, () => { + const webpackOptions = compiler.options; + const entry = + typeof webpackOptions.entry === 'function' + ? webpackOptions.entry() + : webpackOptions.entry; + + webpackOptions.entry = async () => { + const entries = await entry; + + const mergeEntry = (keyFn, key) => [ + ...(keyFn(this.config[key]) || []), + ...(keyFn(entries[key]) || []), + ]; + const cfgOrRemove = (objFn, valueFn, key) => { + const values = mergeEntry(valueFn, key); + return values.length > 0 ? objFn(values) : {}; + }; + + Object.keys(this.config).forEach((key) => { + entries[key] = { + ...cfgOrRemove( + (v) => ({ import: v }), + (c) => c.import, + key + ), + ...cfgOrRemove( + (v) => ({ dependOn: v }), + (c) => c.dependOn, + key + ), + }; + }); + + return entries; }; }); }