diff options
| author | Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> | 2023-03-26 22:39:07 +0530 |
|---|---|---|
| committer | Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> | 2023-03-26 22:39:07 +0530 |
| commit | 068a14ffa464d6cb0ccc5c3cec11d10d8cceae90 (patch) | |
| tree | b0d721ca44a705d6d554e3a93479eee51645d3e7 /config/webpack.config.js | |
| parent | d6682a1ed9acd31dbfdb9e645cc8230c61a268c3 (diff) | |
| download | banglar-bhumi-utils-068a14ffa464d6cb0ccc5c3cec11d10d8cceae90.tar.gz banglar-bhumi-utils-068a14ffa464d6cb0ccc5c3cec11d10d8cceae90.zip | |
Sharing code between scripts for reduced bundle size.
Diffstat (limited to 'config/webpack.config.js')
| -rw-r--r-- | config/webpack.config.js | 88 |
1 files changed, 64 insertions, 24 deletions
diff --git a/config/webpack.config.js b/config/webpack.config.js index 31d838e..baadc51 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -1,4 +1,5 @@ const path = require("path"); +const fs = require("fs"); const CopyPlugin = require("copy-webpack-plugin"); global.ROOT_DIR = path.resolve(__dirname, ".."); @@ -13,57 +14,96 @@ 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 { formatScripts } = webpackRequire("utils/format-scripts"); -const scripts = formatScripts(require(path.resolve(SOURCE_DIR, "scripts.json"))); +const scripts = webpackRequire("utils/scripts"); -const entries = {}; +const sharedModules = webpackRequire("utils/shared-modules"); + +const uninjectedScriptEntries = {}; +const injectedScriptEntries = {}; +const sharedModuleEntries = {}; +const sharedModuleExternals = {}; for (const scriptPath in scripts) { for (const scriptType in scripts[scriptPath]) { const currentScripts = scripts[scriptPath][scriptType]; - entries[`${scriptType} - "${scriptPath}"`] = { + const scriptEntries = scriptType.startsWith("injected") ? injectedScriptEntries : uninjectedScriptEntries; + + scriptEntries[`${scriptType} - "${scriptPath}"`] = { import: inlineJavascript(currentScripts.map(script => `import "${path.resolve(SOURCE_DIR, "scripts", script)}";`).join("\n")), filename: `scripts/${getFileNameHash(scriptPath)}-${scriptType}.js` }; } } -module.exports = { - entry: entries, +for (const sharedModule of sharedModules) { + sharedModuleEntries[sharedModule] = { + import: path.resolve(SOURCE_DIR, "shared", sharedModule), + filename: `shared/${sharedModule}.js`, + library: { + type: "module" + } + }; + sharedModuleExternals[`/shared/${sharedModule}`] = `/shared/${sharedModule}.js`; +} + +const common = { mode: "production", resolve: { - extensions: ["", ".ts", ".js"], + extensions: [".ts", ".js"], alias: { - "@": global.SOURCE_DIR + "/shared": path.resolve(global.SOURCE_DIR, "shared") } }, module: { rules: [ { - test: /\.tsx?$/, + test: /\.ts$/, loader: "ts-loader", options: { configFile: "config/tsconfig.json" } - }, - { - test: /\.(jpg|png|gif)$/, - loader: "url-loader" } ] }, optimization: { minimize: process.env.NODE_ENV === "production" - }, - plugins: [ - new InjectScriptPlugin(), - new CopyPlugin({ - patterns: [{ - from: path.resolve(ROOT_DIR, "static"), - to: "./" - }] - }), - new CreateManifestPlugin() - ] + } }; + +module.exports = [ + { + ...common, + experiments: { + outputModule: true, + topLevelAwait: true + }, + externals: sharedModuleExternals, + entry: uninjectedScriptEntries, + plugins: [ + new CopyPlugin({ + patterns: [{ + from: path.resolve(ROOT_DIR, "static"), + to: "./" + }] + }), + new CreateManifestPlugin() + ] + }, + { + ...common, + entry: injectedScriptEntries, + plugins: [ + new InjectScriptPlugin(), + ] + }, + { + ...common, + externals: sharedModuleExternals, + experiments: { + outputModule: true, + topLevelAwait: true + }, + entry: sharedModuleEntries + } +]; |
