diff options
| author | Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> | 2023-04-04 18:47:07 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-04 18:47:07 +0530 |
| commit | 6bc8d472a556774630e4432141d5ef9f8ea68c59 (patch) | |
| tree | ce84736dce9c14b06f1adbda867aa6a357a4bbab /config/webpack.config.js | |
| parent | d178caee5c93ad9ed91dbd082b0f0b5a9b0507aa (diff) | |
| parent | 35413607c62f2de2a90941d487b7964b5c213999 (diff) | |
| download | banglar-bhumi-utils-6bc8d472a556774630e4432141d5ef9f8ea68c59.tar.gz banglar-bhumi-utils-6bc8d472a556774630e4432141d5ef9f8ea68c59.zip | |
Merge pull request #1 from arpitchakladar/shared-modules
Merging shared modules improvements.
Diffstat (limited to 'config/webpack.config.js')
| -rw-r--r-- | config/webpack.config.js | 95 |
1 files changed, 58 insertions, 37 deletions
diff --git a/config/webpack.config.js b/config/webpack.config.js index 010a51f..15cae74 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -11,16 +11,23 @@ global.production = process.env.NODE_ENV === "production"; global.webpackRequire = modulePath => require(path.resolve(CONFIG_DIR, "webpack", modulePath)); const CreateManifestPlugin = webpackRequire("plugins/create-manifest-webpack-plugin"); +const CreateRulesPlugin = webpackRequire("plugins/create-rules-webpack-plugin"); const InjectScriptPlugin = webpackRequire("plugins/inject-script-webpack-plugin"); const { inlineJavascript } = webpackRequire("utils/inline-javascript"); const { getScriptRuntimeFromType } = webpackRequire("utils/script-runtime"); -const { getFileNameHash } = webpackRequire("utils/file-name-hash"); +const { getFileNameHash } = webpackRequire("utils/filename-hash"); const scripts = webpackRequire("utils/scripts"); const sharedModules = webpackRequire("utils/shared-modules"); +const sharedModulesImportedCount = {}; + +for (const sharedModule of sharedModules) { + sharedModulesImportedCount[sharedModule] = 0; +} + const uninjectedScriptEntries = {}; const injectedAfterScriptEntries = {}; const injectedBeforeScriptEntries = {}; @@ -54,11 +61,16 @@ for (const scriptPath in scripts) { for (const sharedModule of sharedModules) { const sharedModuleNameHash = getFileNameHash(sharedModule, "shared"); + const sharedModuleGlobalVariableName = `$${sharedModuleNameHash.substring(sharedModuleNameHash.length - 16)}`; sharedModuleEntries[sharedModule] = { import: path.resolve(SOURCE_DIR, "shared", sharedModule), - filename: `shared/${sharedModuleNameHash}.js` + filename: `shared/${sharedModuleNameHash}.js`, + library: { + name: sharedModuleGlobalVariableName, + type: "var" + } }; - sharedModuleExternals[`@/shared/${sharedModule}`] = `/shared/${sharedModuleNameHash}.js`; + sharedModuleExternals[`@/shared/${sharedModule}`] = sharedModuleGlobalVariableName; } const commonOptions = { @@ -82,26 +94,32 @@ const commonOptions = { }, optimization: { minimize: process.env.NODE_ENV === "production" - } -}; - -const ecmaScriptModuleOptions = { - experiments: { - outputModule: true, - topLevelAwait: true - } -}; - -const scriptOptions = { + }, output: { iife: true } }; +const sharedModuleOptions = { + externals: sharedModuleExternals, + externalsType: "var", + module: { + rules: [ + { + test: /\.(j|t)s$/, + loader: path.resolve(CONFIG_DIR, "webpack/loader/count-imports-loader.js"), + options: { + sharedModulesImportedCount + }, + enforce: "post" + } + ] + }, +}; + const uninjectedScriptConfiguration = merge( commonOptions, - ecmaScriptModuleOptions, - scriptOptions, + sharedModuleOptions, { entry: uninjectedScriptEntries, plugins: [ @@ -110,24 +128,13 @@ const uninjectedScriptConfiguration = merge( from: path.resolve(ROOT_DIR, "static"), to: "./" }] - }), - new CreateManifestPlugin() - ], - module: { - rules: [ - { - enforce: "post", - test: /\.(js|ts)$/, - loader: "./config/webpack/loader/dynamic-imports-loader" - } - ] - } + }) + ] } ); const injectedAfterScriptConfiguration = merge( commonOptions, - scriptOptions, { entry: injectedAfterScriptEntries, plugins: [ @@ -138,7 +145,6 @@ const injectedAfterScriptConfiguration = merge( const injectedBeforeScriptConfiguration = merge( commonOptions, - scriptOptions, { entry: injectedBeforeScriptEntries, plugins: [ @@ -147,17 +153,32 @@ const injectedBeforeScriptConfiguration = merge( } ); +const sortedSharedModules = [] + const sharedModulesConfiguration = merge( commonOptions, - ecmaScriptModuleOptions, + sharedModuleOptions, { - output: { - library: { - type: "module" - } - }, entry: sharedModuleEntries, - externals: sharedModuleExternals + plugins: [ + new CreateManifestPlugin({ + sharedModulesImportedCount, + sortedSharedModules + }), + new CreateRulesPlugin() + ], + module: { + rules: [ + { + test: /\.(j|t)s$/, + loader: path.resolve(CONFIG_DIR, "webpack/loader/arrange-shared-module-loader.js"), + options: { + sortedSharedModules + }, + enforce: "post" + } + ] + } } ); |
